遍历问题

williamf 2001-07-10 08:50:31
现在有树的前序,中序,求他的后序遍历?
...全文
113 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
思考...

33,008

社区成员

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

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