首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求非二叉树的遍历算法解决办法

2012-03-09 
求非二叉树的遍历算法删除树的一个节点下所有的孩子节点,包括孩子的兄弟节点、孩子节点……,求遍历算法,非二

求非二叉树的遍历算法
删除树的一个节点下所有的孩子节点,包括孩子的兄弟节点、孩子节点……,求遍历算法,非二叉树。

[解决办法]
三种遍历可以形式地描述如下,其中用到了树的ADT操作:

Procedure Preorder_Traversal(v:NodeType); {前序遍历算法}

begin

Visite(v); {访问节点v}

i:=Leftmost_Child(v);

while i <> ∧ do

begin

Preorder_Traversal(i);{从左到右依次访问v的每一个儿子节点i}

i:=Right_Sibling(i);

end;

end;

Procedure Inorder_Traversal(v:NodeType); {中序遍历算法}

begin

if Leftmost_Child(v)=∧ {判断v是否是叶节点}

then Visite(v)

else

begin

Inorder_Traversal(Leftmost_Child(v)); {中序遍历v的左边第一个儿子节点}

Visite(v); {访问节点v}

i:=Right_Sibling(Leftmost_Child(v)); {i=v的左边第二个儿子}

while i <> ∧ do

begin

Inorder_Traversal(i);

{从左边第二个开始到最右边一个为止依次访问v的每一个儿子节点i}

i:=Right_Sibling(i);

end;

end;

end;

Procedure Postorder_Traversal(v:NodeType); {后序遍历算法}

begin

i:=Leftmost_Child(v);

while i <> ∧ do

begin

Preorder_Traversal(i);{从左到右依次访问v的每一个儿子节点i}

i:=Right_Sibling(i);

end;

Visite(v); {访问节点v}

end;

为了将一棵树中所有结点按某种次序列表,只须对树根调用相应过程。
[解决办法]
树的遍历

树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的系统的访问,即依次对树中每个结点访问一次且仅访问一次。树的3种最重要的遍历方式分别称为前序遍历、中序遍历和后序遍历。以这3种方式遍历一棵树时,若按访问结点的先后次序将结点排列起来,就可分别得到树中所有结点的前序列表,中序列表和后序列表。相应的结点次序分别称为结点的前序、中序和后序。

树的这3种遍历方式可递归地定义如下:

*如果T是一棵空树,那么对T进行前序遍历、中序遍历和后序遍历都是空操作,得到的列表为空表。
*如果T是一棵单结点树,那么对T进行前序遍历、中序遍历和后序遍历都只访问这个结点。这个结点本身就是要得到的相应列表。
*否则,设T如图6所示,它以n为树根,树根的子树从左到右依次为T1,T2,..,Tk,那么有:
1.对T进行前序遍历是先访问树根n,然后依次前序遍历T1,T2,..,Tk。
2.对T进行中序遍历是先中序遍历T1,然后访问树根n,接着依次对T2,T2,..,Tk进行中序遍历。
3.对T进行后序遍历是先依次对T1,T2,..,Tk进行后序遍历,最后访问树根n。
.........
【参看链接:http://algorithm.diy.myrice.com/datastructure/basic/tree/chapter5.htm】

热点排行