【Lehr】【数据结构与算法】【C语言】二叉树由两种遍历推出整棵树
2019-06-09 21:11
369 查看
【Lehr】【数据结构与算法】【C语言】二叉树由两种遍历推出整棵树
二叉树的先序,中序,后序遍历中,任意知道两种就可以推出整棵树长什么样。思路都是一样的,这里以先序和中序为例。
以下这个过程涉及到逆向推导,请读者准备个草稿纸XD
例如:已知先序遍历和中序遍历,求整棵树的形状?
先序:A B D E H C F I J G
中序:D B H E A F J I C G
解:
先序遍历的第一个元素是根节点,所以A为根节点,通过中序遍历中的A的位置,我们可以将中序遍历的左子树和右子树分出来:
D B H EA
F J I C G
左子树 … … 右子树
所以可以画出这样一个草图:
接下来我们再对左子树BDEH进行分析:
先序:A B D E H
C F I J G
中序:D B H E A
F J I C G
所以对左子树来说,先序和中序分别是:
先序:B D E H
中序:D B H E
所以同理B为根节点,分出左右子树:
中序:
DB
H E
其左子树为D右子树为HE
进一步细化这个图得到:
然后接着上面的继续:
先序:B
DE H
中序:
DB H E
所以对右子树来说,先序和中序分别是:
先序:E H
中序:H E
所以同理E为根节点,H为左子树。
进一步细化这个图得到:
现在的话,整个左边已经全部划分清楚了,现在来看右边部分:
总的排序:
先序:A
B D E HC F I J G
中序:
D B H EA F J I C G
所以对右子树来说,先序和中序分别是:
先序:C F I J G
中序:F J I C G
所以同理C为根节点,分出左右子树:
中序:
F J IC
G
得到左子树FJI和右子树G,细分之后画图:
现在再来分析FJI这棵树:
先序:F I J
中序:F J I
所以自然而然,根节点F。但这里注意以下,中序也是F在第一个位置,所以左子树为空,右子树为JI,所以右子树也像上面那样再划分一次,最后得到完整的树:
成功!
相关文章推荐
- 【Lehr】【数据结构与算法】【C语言】二叉树的非递归遍历
- 【Lehr】【数据结构与算法】【C语言】按照指定输入方式创建二叉树
- 数据结构与算法 -- 二叉树链式详解((非)/递归遍历,叶子个数,深度计算)
- 【数据结构与算法】二叉树的层序遍历
- C语言 数据结构之二叉树 数据结构上机测试4.1:二叉树的遍历与应用1
- 数据结构与算法简记:按层次顺序遍历和存储二叉树
- 【数据结构与算法】二叉树广度遍历
- 【数据结构与算法】二叉树的层序遍历
- 数据结构例程——二叉树的层次遍历算法
- 【数据结构与算法】二叉树广度遍历
- 数据结构(C语言实现) - 二叉树的基本操作(建立,遍历,结点数,叶子结点数,高度,按树状打印,输出叶子结点等)
- 【数据结构与算法】根据遍历结果构建二叉树
- C语言 数据结构之二叉树 数据结构实验之二叉树二:遍历二叉树
- C语言 数据结构之二叉树 数据结构实验之二叉树五:层序遍历
- 数据结构与算法(十二)前/中/后遍历二叉树
- C语言 数据结构之二叉树 数据结构实验之二叉树的建立与遍历
- 【数据结构与算法】二叉树的层序遍历
- 【数据结构与算法】二叉树的层序遍历
- 数据结构 - 二叉树 - 遍历算法代码
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)