非递归前序遍历二叉树
书上说非递归前序遍历二叉树是:从二叉树的根结点开始,令制指针变量P指向根结点,访问当前结点P,并将P压入栈中,然后令P指向它当前指向结点的左孩子结点。若P不为空,继续访问当前结点P,并将P压入栈中。如此重复,直到P为空时,从栈中弹出栈顶元素赋给指针变量P,并令P指向它当前指向结点的右孩子结点,重复上述过程,当P为空并且栈也为空时,遍历结束。
若二叉树为
A
B C
D E F G
那么:
访问A,A进栈
访问B,B进栈 栈为BA
访问C,C进栈 栈为CBA
C出栈,P指向G
访问G,G进栈 栈为GBA
访问F,F进栈 栈为FGBA
F出栈,
G出栈,
B出栈,P指向E
访问E,E进栈 栈为EA
访问D,D进栈 栈为DEA
D出栈,
E出栈,
A出栈,
访问顺序为:ABCGFED 而不是ABDECFG
请问我的理解什么地方错了,正确的理解是什么样的
问题点数:20、回复次数:2Top
1 楼hproof(魔鬼天师)回复于 2001-09-07 18:23:51 得分 20
A
B C
D E F G
那么:
P=A S=
A<==,PUSH A S=A P=P.LP=A.LP=B
B<==,PUSH B S=AB P=P.LP=B.LP=D //warning: error p=p.rp=b.rp=c
D<==,PUSH D S=ABD P=P.LP=D.LP=NULL
POP P S=AB P=P.RP=D.RP=NULL
POP P S=A P=P.RP=B.RP=E
E<==,PUSH E S=AE P=P.LP=E.LP=NULL
POP P S=A P=P.RP=E.RP=NULL
POP P S= P=P.RP=A.RP=C
....
Top
2 楼dengyy(开山斧)回复于 2001-09-10 10:05:04 得分 0
谢谢Top




