关于二叉树遍历的问题

metoo03 2009-08-09 09:21:40
请教一个题目,请说明解题过程,谢谢。
若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的节点访问顺序是-----?
根是a左子树是dbg右子树echf这些已经搞清楚了,但是顺序怎么放就不会了。
...全文
225 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
skipwitit 2009-10-24
学习了 呵呵 递归求解 很强大
回复
fatiezhe 2009-08-11
[Quote=引用 7 楼 henry11 的回复:]
我来对个答案,是不是gdbehfca啊
[/Quote]
正解
回复
henry11 2009-08-10
我来对个答案,是不是gdbehfca啊
回复
oyzdz1988 2009-08-10
嗯,就是用递归的思路求解的,最开始可以确定根结点,然后将原始序列分成左右两段~

分别对左右两子段做同样的处理~
回复
metoo03 2009-08-10
[Quote=引用 2 楼 joanlynnlove 的回复:]
C/C++ codevoid createTree(BiTree T,string pre,stringin){//递归由前序中序建立二叉树 T->data= pre[0];
T->lchild= T->rchild= NULL;int i;for(i=0;i<in.length();i++)if(in[i]== pre[0])break;if(i>0){
¡­
[/Quote]
有java的代码吗?
回复
jking1989 2009-08-09
你的那个我没弄,你看下这个方法学会了 应该就能出来了。
回复
jking1989 2009-08-09
介绍一个我之前看到过的方法,通俗易懂你看下:
举个例子吧

已知前序是ABCDEFG 中序是CBEDAFG 求二叉树
首先从取前序第1个字母(A) 按此字母把中序分成两段 (CBED) (AFG)
A做根 (CBED)做左子树 (FG)右子树
再按长度把前序后面的部分分成(BCDE) (FG)
问题就转换成
已知前序是BCDE 中序是CBED 求二叉树

已经前序是FG 中序是FG 求二叉树
看出来了没有,递归求解的.
下面的步骤省略分析.
前序 中序 : 根 左子树分解 右子树分解
BCDE CBED : B (C) (C) (ED) (DE)
C C : C
DE  ED : D (E) (E)
E E : E
FG FG : F (G) (G)
G G : G
得出的二叉树就是
A
/ \
B F
/ \ \
C D G
/
E



回复
acdbxzyw 2009-08-09
void createTree(BiTree T,string pre,string in){   
//递归由前序中序建立二叉树
T->data = pre[0];
T->lchild = T->rchild = NULL;
int i;
for(i=0;i<in.length();i++)
if(in[i] == pre[0]) break;
if(i>0){
T->lchild = new BiNode();
createTree(T->lchild,pre.substr(1,i),in.substr(0,i));
}
if(i<pre.length()-1){
T->rchild = new BiNode();
createTree(T->rchild,pre.substr(i+1,pre.length()-i),in.substr(i+1,in.length()-i));
}
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/joanlynnlove/archive/2009/03/20/4008281.aspx
回复
fatiezhe 2009-08-09
以楼主的例子讲:
1、前序遍历的话第一个必然是根,因此a是整个树的根,然后在中序序列中找到a,a的左边为左子树dgb,右边为右子树echf
2、左子树有三个元素dgb,对应前序序列中a后面的bdg,由于在前序序列中子树第一个元素必是根,因此b是左子树的根,再回到中序序列dgb中可以看出,b的左子树为dg,无右子树
3、以后的过程都是递归了,就是找到子树在两个序列的对应位置,前序序列中第一个元素为根,放到中序序列中比对,左边的即为左子树,右边的为右子树。最后得到树如下:
a
/ \
b c
/ / \
d e f
\ /
g h
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告