已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍因序列是多少?
前序遍因序列是cedba。
二又树的遍历有3种:前序、中序和后序。
①前序首先遍历访问根结点,然后按左右顺序遍历子结点。
②中序遍历首先访问左子树,然后访问根结点,最后遍历右子树。
③后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点。本题根据后序和中序遍历的结果可以得出二叉树的结构,然后再对其进行前序遍历。
二叉树
在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点。
深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。
一棵深度为k,且有2^k-1个节点称之为满二叉树;深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为完全二叉树。
接着由dabe知道其根节点为e,所以在中序deba中左子树为d右子树为ba
再来,后序ab,中序ba,b为节点,a为右子树
前序遍历序列为cedba
----c
---/
--e
-/--\
d ----b
-------\
---------a
后序遍历序列可确定根结点为c。
2.再依据中序遍历序列可知其左子树由deba构成,右子树为空。
3.又由左子树的后序遍历序列可知其根结点为e,由中序遍历序列可知其左子树为d,右子树由ba构成,求得该二叉树的前序遍历序列为选项A。
4.本题中后序和中序第一个节点都是D,那么可以确定:
5.D没有右子树,D本身是一个节点的左子树。中序遍历,D后面是E,说明D父节点是E,在草稿上画出来这个关系。
6.在看中序遍历E后面是B,说明B是E的右子树,这样我们确定了3个节点了。
7.再看中序的遍历B后的是A,但我们无法确定是左还是右,先放着,继续看后序遍历E后面是C,通过这个条件,说明C可能是E的父节点的右子树,也可能就是E的父节点。
8.但是本题一共只有5个节点,所以C肯定是E的父节点。
9.这样,我们可以确定4个节点了,这剩下A节点。要区分A是左还是右,我们看后序遍历,A是在D之后,B之前,这个条件也只能说A是B子节点,但仍然不能说明左右。
10.所以我觉得:这道题有2个解:A在左在右,都是正确的。
11.A是左是右,都符合后序和中序的遍历,都为正确。所以,只画这个图是不完整的,应该把A分别为左右节点的图都画出来。
12.作为答案,A的位置不同,虽然先序遍历的结果都一样,但是图是不一样的。