完整代码,全局变量outStr里面放了遍历出的结果
可以运行了,但是有个问题,怎么在每次栈改变的时候,显示栈内所存有的数据啊?
pnode(S.Peek)^.data这样用是不行的啊
uses里面加上Contnrs
type里面加上
pnode
=
^node;
node
=
Record
data
:
string;
lchild,
rchild
:
pnode;
end;
procedure
InOrder(p:
pnode);
var
s:TStack;
begin
s:=TStack.Create;
S.Push(p);
while
S.AtLeast(1)
do
begin
while
s.Peek<>nil
do
begin
S.Push(pnode(S.Peek)^.lchild);
end;
p:=S.Pop;
if
S.AtLeast(1)
then
begin
p:=s.Pop;
strOut:=strOut+p^.data+#13+#10;
s.Push(p^.rchild);
end;
end;
end;
"三种算法的访问路径是相同的.只是访问节点的时机不同.
第一
次经
过时访问是
先序遍历
第二次经过时访问是
中序遍历
第三次经过时访问是
后序遍历
"
引用网上的结论.
自己感觉三种也没有什么有缺点好分.只是根据具体的需求,采用特定的算法.