数据结构二叉树已知中序遍历,后序遍历,求先序遍历???
满意答案
SuN 3级 2011-01-04
通过分段来解决,找到根节点(通过后序),然后将中序序列分成两段,左右子树,然后递归进行,分的时候可以利用求中序的左右子树的结点个数来确定后序序列的每段节点个数.
例如
中 BDACE
后 DBECA
1.由后序遍历的知道最后一个节点一定是根节点,该例中为A
2.中序中对应的根就是A,推得A为根BD为左子树CE为右子树
3.左子树2个结点右子树也为2个,因为后序遍历是先左再右因此将后序分为两段左DB,右EC
4.由此确定左子树的根为B,右子树根为C
5.在回到中序中左子树部分 BD (B为根)其右子树为D 左子树部分 根为C右子树为E
如果结点和多的时候判断都是这样递归地进行.
由上述推得的结果
得到2叉树的结构图
-----A
----/--\
---B---C
----\-----\
-----D----E
得前序为 ABCDE
-
补充:
-
1,5 两部分改了一下(没写清),如下.
1.由后序遍历的定义知道最后一个节点一定是根节点,该例中为A
5.在回到中序中左子树部分 BD (B为根),左为空右子树部分CE(C为根)左为空右子树为E
-
补充:
-
又少打了几个字,改了下。
5.在回到中序中左子树部分 BD (B为根)中左为空右子树为D,而右子树部分CE(C为根)左为空右子树为E
-
追问:
- 你说的这个例子有点简单 请帮忙分析一下这个例子吧!!中序 abcdefg 后序bdcafge 求前序遍历??? 谢谢!
-
回答:
-
中序 abcdefg
后序 bdcafge1.由后序推得根为 e
2.将中序中分为两部分,左子树为abcd 右子树fg
3.将后序分段 左 bdca 右 为 fg
4.由三推得 左子树根为 a 右子树根为g
5.重复1-3步骤 得知 2中中序的左子树 a为根 bcd为右子树,右子树fg以g为根f为左子树
6.bcd中由 后序遍历结果知 c为根(由步骤5得),那么左右子树分别为b d则树形状为
-------e
------/--\
-----/----\
-----a----g
-----\----/
------c--f
-----/--\
----b---d
则先序遍历结果为 eacbdgf1.后序得根,然后将中序分段.
2.判断出左右两个子树,得到两个子树中结点的个数,将后将后序再分段,
因为后序是左右根 因此根据中序左右子树中节点的个数将后序分成两个部分 ,然后在找出根,在对中序中的左右子树分段。
及以后对于左右两个子树重复1,2的步骤,即以递归的方式,最终得到整个树形状