• 全部
  • 问答

遍历问题

williamf 2001-07-10 08:50:31
现在有树的前序,中序,求他的后序遍历?
...全文
66 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sumtec 2001-07-11
用前序和中序去建树,在遍历生成后序。
1。前序的第一个节电便是根节点
对于前序中第n个节点:
2。第n+1个是左子树或右子树。(也可能没有)
查中序遍厉,若前序的第n+1个节点在第n个节点的左边,说明有左子树。
如此对付所有左子树直至没有左子树。
3。查中序遍厉,
a.第n个节点是其父节点的左孩子则:第n+1个节点在第n个节点及第n个节点的父节点之间,说明有右子树。
b.否则:第n+1个节点在其父节点在中序遍厉中的右边,说明有右子树.
若有,对第n+1个节点重复第二步。
若鹜,沿已经建好的树退到第n个节点的父节点用第三步的方法,判断第n+1个节点。

例:
a
b c
d e f g

前序:abdecfg
中序:dbeafcg

step 1: abdecfg dbeafcg a
^* * ^ b

step 2: abdecfg dbeafcg a
^* *^ b
d

step 3: abdecfg dbeafcg a
^* ^ * b
d
So, e is not the left child of node d.

step 4: abdecfg dbeafcg a
^* ^!* b
d
E is not between d and d's father b. So e is not the right child of node d.

step 5: abdecfg dbeafcg a
^ * ^*! b
d e
E is between b and b's father a. So e is the right child of node d.

step 6: abdecfg dbeafcg a
^* ^ * b
d e

step 7: abdecfg dbeafcg a
^* ^! * b
d e

step 8: abdecfg dbeafcg a
^ * ^ * b
d e

step 9: abdecfg dbeafcg a
^ * ^ ! * b
d e

step 10: abdecfg dbeafcg a
^ * ^ * b c
d e

step 11: abdecfg dbeafcg a
^* *^ b c
d e f

step 12: abdecfg dbeafcg a
^* ^ * b c
d e f

step 13: abdecfg dbeafcg a
^* ^!* b c
d e f

step 14: abdecfg dbeafcg a
^ * ^!* b c
d e f

step 15: abdecfg dbeafcg a
^ * ^* b c
d e f g


后续遍厉不用我说了吧?
回复
williamf 2001-07-11
我怎么给你们家分呢
回复
anjun 2001-07-11
template<class Type>void Tree<Type>::PostOrder()
{
if(!IsEmpty())
{
TreeNode<Type>*p=current;//保存当前指针
int i=FindChild();//找第一棵子树
while(i){PostOrder();i=NextSibling();}//后跟遍历所有子树
current=p; visit();//恢复当前指针,最后访问根结点
}
}

树使用左子女右兄弟表示法
回复
iamxia 2001-07-10
思考...
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2001-07-10 08:50
社区公告
暂无公告