关于二叉树遍历的问题

metoo03 2009-08-09 09:21:40
请教一个题目,请说明解题过程,谢谢。
若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的节点访问顺序是-----?
根是a左子树是dbg右子树echf这些已经搞清楚了,但是顺序怎么放就不会了。
...全文
253 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧