通过先序遍历和中序遍历后的序列还原二叉树
Posted 每天更强一点...
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过先序遍历和中序遍历后的序列还原二叉树相关的知识,希望对你有一定的参考价值。
Reference
[1] 转自 http://www.cnblogs.com/caijh/p/6935645.html
当我们有一个
先序遍历序列:1,3,7,9,5,11
中序遍历序列:9,7,3,1,5,11
我们可以很轻松的用笔写出对应的二叉树。但是用代码又该如何实现?
下面我们来简单谈谈基本思想。
首先,先序遍历的顺序是根据 根-左孩子-右孩子 的顺序遍历的,那么我们可以率先确认的是先序遍历序列的第一个数就是根节点,然后中序遍历是根据 左孩子-根-右孩子 的顺序遍历的。我们通过先序遍历确认了根节点,那么我们只需要在中序遍历中找到根节点的位置,然后就可以很好地区分出,那些属于左子树的节点,那些是属于右子树的节点了。如下图:
我们确定数字1为根节点,然后根据中序遍历的遍历顺序确定,中序遍历序列中数字1的左边全部为左子树节点,右边全部为右子树。通过左子树节点的个数,得出先序遍历序列中从根节点往后的连续3个数是属于左子树的,剩下的为右子树。这样再在左右子树的序列中重复以上步骤,最终找到没有子节点为止。
以上是关于通过先序遍历和中序遍历后的序列还原二叉树的主要内容,如果未能解决你的问题,请参考以下文章
七:重建二叉树(依据先序遍历(或者后序遍历)和中序遍历重建二叉树)