二叉树系列(一):已知先序遍历序列和中序遍历序列,求后序遍历序列
2014-10-07 19:27
525 查看
首先介绍一下三种遍历顺序的操作方法:
1.先序遍历
(1)访问根结点;
(2)先序遍历左子树;
(3)先序遍历右子树。
2.中序遍历
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树。
3.后序遍历
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点。
知道了二叉树的三种遍历规则,只要有中序遍历序列和前后任一种遍历序列,我们就可以求出第三种遍历序列,今天我们研究的是已知先序和中序遍历序列,求后序遍历序列。
已知该二叉树的先序遍历序列为:A-B-D-E-G-C-F,中序遍历序列为:D-B-G-E-A-C-F。
接下来我们就可以求出该二叉树的后序遍历序列,具体步骤如下:
第一步:先求root根节点,根据先序遍历规则我们可知root为先序遍历序列的第一个节点,因此该二叉树的root节点为A。
第二步:求root的左子树和右子树,这点我们可以从中序遍历序列中找出,位于root节点A左侧的D-B-G-E为root的左子树,位于A右侧的C-F为右子树。
第三步:求root的左孩子leftchild和右孩子rightchild,leftchild为左子树的根节点,rightchild为右子树的根节点。我们可以找到左子树D-B-E-G在先序遍历序列中的排列顺序为B-D-E-G,由于先序遍历首先访问根节点,所以B为左子树的根节点,即B为root的leftchild;同理root的rightchild为C。
第四步:我们可以根据上面的步骤找到B的左子树和右子树,以及C的左子树和右子树,然后分别求出左右子树的根节点。以此类推,只要求出根节点及其leftchild和rightchild,剩下的过程都是递归的,最后我们就可以还原整个二叉树。
根据以上步骤我们求出的二叉树如下图所示:
最后我们就可以根据后续遍历规则得出该二叉树的后续遍历序列为:D-G-E-B-F-C-A。
另一种情况为已知中序和后序遍历序列求先序遍历序列,我们将分别在后面的博客中介绍。
————————未完,待续。。。————————
1.先序遍历
(1)访问根结点;
(2)先序遍历左子树;
(3)先序遍历右子树。
2.中序遍历
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树。
3.后序遍历
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点。
知道了二叉树的三种遍历规则,只要有中序遍历序列和前后任一种遍历序列,我们就可以求出第三种遍历序列,今天我们研究的是已知先序和中序遍历序列,求后序遍历序列。
已知该二叉树的先序遍历序列为:A-B-D-E-G-C-F,中序遍历序列为:D-B-G-E-A-C-F。
接下来我们就可以求出该二叉树的后序遍历序列,具体步骤如下:
第一步:先求root根节点,根据先序遍历规则我们可知root为先序遍历序列的第一个节点,因此该二叉树的root节点为A。
第二步:求root的左子树和右子树,这点我们可以从中序遍历序列中找出,位于root节点A左侧的D-B-G-E为root的左子树,位于A右侧的C-F为右子树。
第三步:求root的左孩子leftchild和右孩子rightchild,leftchild为左子树的根节点,rightchild为右子树的根节点。我们可以找到左子树D-B-E-G在先序遍历序列中的排列顺序为B-D-E-G,由于先序遍历首先访问根节点,所以B为左子树的根节点,即B为root的leftchild;同理root的rightchild为C。
第四步:我们可以根据上面的步骤找到B的左子树和右子树,以及C的左子树和右子树,然后分别求出左右子树的根节点。以此类推,只要求出根节点及其leftchild和rightchild,剩下的过程都是递归的,最后我们就可以还原整个二叉树。
根据以上步骤我们求出的二叉树如下图所示:
最后我们就可以根据后续遍历规则得出该二叉树的后续遍历序列为:D-G-E-B-F-C-A。
另一种情况为已知中序和后序遍历序列求先序遍历序列,我们将分别在后面的博客中介绍。
————————未完,待续。。。————————
相关文章推荐
- 二叉树系列(一):已知先序遍历序列和中序遍历序列,求后序遍历序列
- 已知二叉树的先序遍历和中序遍历序列,输出后序遍历序列
- 已知二叉树的先序遍历和中序遍历序列求后序遍历序列
- 给定二叉树的先序遍历和中序遍历,输出它的后序遍历序列
- 二叉树系列(二):已知中序遍历序列和后序遍历序列,求先序遍历序列
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的先序遍历和中序遍历,如何求后序遍历
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 【面试算法系列】已知二叉树的前序和中序遍历重建二叉树 - C语言实现
- 六、树和二叉树--(3)已知先序遍历和中序遍历求后序遍历
- 已知先序遍历和中序遍历,求后序遍历 && 求二叉树中节点的最大距离
- 已知先序遍历和中序遍历,求后序遍历
- 已知前序遍历序列和中序遍历序列,求二叉树的后序遍历
- c/c++实现利用二叉树的先序遍历和中序遍历序列重建树
- 已知二叉树先序、中序(中序、后序)遍历序列,输出后序(先序)遍历序列
- 【郝斌数据结构自学笔记】70-74_已知两种遍历序列求原始二叉树概述_已知先序和中序求后序_已知中序和后序求先序_树的应用简单介绍
- 已知先序遍历和中序遍历,输出他的后序遍历序列.