根据前序和中序推出后序

转载 2016年08月29日 20:06:04

最近面试总遇到这种根据给出的两类序遍历,然后求按另一种形式序的遍历。看来有必要好好总结下这个知识点,省的每次笔试时都得花不少时间推导。

首先,我们看看前序、中序、后序遍历的特性: 
前序遍历:(根—>左—>右)
    1.访问根节点 
    2.前序遍历左子树 
    3.前序遍历右子树 
中序遍历:(左—>根—>
    1.中序遍历左子树 
    2.访问根节点 
    3.中序遍历右子树 
后序遍历:(左—>右—>
    1.后序遍历左子树 
    2.后序遍历右子树 
    3.访问根节点

 

三序中知道其中两个就可以推出第三个,但前提是我们必须知道中序(这里是针对二叉树的,不包括二叉搜索树).因为:先序和后序给我们提供的信息是一样的--告诉我们谁是根节点,中序则告诉我们左右子树在哪儿。

例:已知先序为eacbdgf,中序为abcdefg,求后序。

由先序我们知道e为根节点,我们在中序中把左右子树括起来 --(abcd)e(fg)

同样对左子树abcd进行分析,先序为acbd,中序为abcd.--a(bcd)

递归下去就可以了

后序为bdcafge

 

扩展:

在2014年阿里实习生招聘试题中就有一个问题:

下面关于二叉搜索树的是否正确?

给定一棵二叉搜索树的前序和后序遍历结果,无法确定这棵二叉搜索树。

这个说法是错误的。

二叉树(不是搜索二叉树),必须是中根加上先根或者后根就能构造出树,但是,这里面说了是二叉搜索树,已经暗含中根了

【LeetCode】根据前序和中序遍历建树 && 根据中序遍历和后续遍历建树

1、Construct Binary Tree from Preorder and Inorder Traversal  Total Accepted: 7041 Total Submissions...
  • u013027996
  • u013027996
  • 2014年04月09日 11:19
  • 1181

前序、中序、后序表达式的相互转换问题

这是一个常考的问题,现在总结一下: 一、前序表达式转换为中序表达式: 从右往左开始,取出一个操作符和操作符右边的两个数进行计算,并将计算的结果放过去,直到计算结束。以前序表达式“+/*23-21*3-...
  • u010874036
  • u010874036
  • 2016年08月18日 11:30
  • 2710

二叉树先序,中序,后序遍历之间的相互求法

首先,我们要明白,什么是树?这是大自然中一棵树的模型照片 而在数据结构中的树,会是什么样的结构呢? 树形结构广泛存在我们的现实生活里,下面两张图你一定不陌生吧,第一张是 Linux 文件系...
  • liujian20150808
  • liujian20150808
  • 2016年03月06日 23:22
  • 1770

根据前序和中序重建二叉树

注意:1、仅根据前序和后序无法构建唯一的二叉树;2、二叉树前序遍历,第一个数字总是树的根节点的值;3、中序遍历中,根节点的值在序列的中间,左子树的值子在根节点的值得左边,右字树的值在根节点的值得右边;...
  • dutsoft
  • dutsoft
  • 2014年05月21日 15:13
  • 999

根据二叉树的前序和中序求后序

在面试的过程中,发现有几家公司都喜欢考这样的一道题,就是在一棵二叉树中,已知这棵二叉树的前序和中序遍历结果,要求写出后序遍历结果。  例如:在一棵二叉树总,前序遍历结果为:ABDGCEFH,中序...
  • hinyunsin
  • hinyunsin
  • 2011年04月11日 14:31
  • 24037

根据二叉树先序和中序遍历结果求其后序遍历

首先我们先复习下不同类别的遍历: 先序遍历:遍历二叉树时先遍历根节点,ra...
  • layrong
  • layrong
  • 2014年09月12日 21:34
  • 2981

根据前序和中序推出后序

最近面试总遇到这种根据给出的两类序遍历,然后求按另一种形式序的遍历。看来有必要好好总结下这个知识点,省的每次笔试时都得花不少时间推导。 首先,我们看看前序、中序、后序遍历的特性:  前序遍历:(根...
  • mawu_1014
  • mawu_1014
  • 2016年08月29日 20:06
  • 581

如何根据二叉树前序和中序求后序

根据如下前序和中序字串求出后序前序:ABDCEF中序:DBAECF分析:首先要弄清楚二叉树遍历规则:前序遍历方式为:根节点->左子树->右子树中序遍历方式为:左子树-&am...
  • houqingchun
  • houqingchun
  • 2018年02月09日 10:11
  • 2

已知前序(先序)与中序输出后序

已知前序(先序)与中序输出后序: 前序:1, 2, 3, 4, 5, 6(根左右) 中序:3, 2, 4, 1, 6, 5(左根右) 分析:因为前序(根左右)最先出现的总是根结点,所以令root...
  • liuchuo
  • liuchuo
  • 2016年08月06日 13:37
  • 975

前序,中序写出后向遍历,中序,后序写前序

#include #include #include #include using namespace std; void post_order(const char *pre,co...
  • taoyanqi8932
  • taoyanqi8932
  • 2016年06月10日 16:22
  • 1298
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:根据前序和中序推出后序
举报原因:
原因补充:

(最多只允许输入30个字)