由中序和后序求先序遍历

数据结构二叉树已知中序遍历,后序遍历,求先序遍历???

 
10
都知道已知先序遍历,中序遍历得后序遍历好得。。。但已知中序遍历,后序遍历,求先序遍历该怎么考虑呢?如果是个选择还好做,但要是填空该怎么考虑??请举例说明!!非常感谢

满意答案

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 
后序 bdcafge

1.由后序推得根为 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
则先序遍历结果为 eacbdgf

 

 

1.后序得根,然后将中序分段.

2.判断出左右两个子树,得到两个子树中结点的个数,将后将后序再分段,

因为后序是左右根 因此根据中序左右子树中节点的个数将后序分成两个部分 ,然后在找出根,在对中序中的左右子树分段。

及以后对于左右两个子树重复1,2的步骤,即以递归的方式,最终得到整个树形状

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值