通过前序遍历反向创建二叉树
上一篇文章介绍了二叉树的一种创建方法,即一个一个创建节点,再建立它们之间的关系,当节点很多时,这样创建显得比较 low,那么如果给定二叉树排列顺序的情况下,如何通过来创建二叉树呢?本文主要实现给定前序遍历顺序来动态创建二叉树的过程。
假设这里给定一个二叉树的前序排序为:ABDC,思考是否能确定二叉树的结构。
我们可以看下面的图:
这两张图的先序排列顺序都是 ABDC,因为没法知道 D 是左孩子还是右孩子,故这里约定,当节点没有左孩子或右孩子的时候,用 # 表示。上图给定的排序分别应是:ABD#C 和 AB#DC。
好,有了约定,下面给定一个先序排序 ABD##E##C#F##,将二叉树创建出来。
我们先将二叉树画出来
开始编码:
1 | /** |
这里也是通过递归来创建二叉树,可见递归在二叉树的创建和遍历中用的非常之多。
测试一下函数的正确性:
1 | public static void main(String[] args) { |
这里,首先按给的先序排列创建了二叉树,然后用之前先序遍历二叉树的方法,将二叉树每个节点打印出来,看下打印结果:
1 | A B D E C F |
与给定的顺序一致,至此完成了按先序创建二叉树的方法。
Title: 通过前序遍历反向创建二叉树
Author: mjd507
Date: 2017-05-28
Last Update: 2024-01-27
Blog Link: https://mjd507.github.io/2017/05/28/Data-Structure-Binary-Tree-2/
Copyright Declaration: This station is mainly used to sort out incomprehensible knowledge. I have not fully mastered most of the content. Please refer carefully.