<强>二叉树前序、后序和后序遍历的非递归实现)强>
<强> 强>
>强,那么我们必须自己要有一个,用来。
1空白PreOrderTraverse (BinaryTree根)2 {
3,,BinaryTree cur=根;
4,,stack
5,,而(零!=cur | | ! s.empty ())
6,,{
7,,,,而(零!=cur)
8,,,,{
9,,,,,,打印cur.data;
10,,,,,s.push(坏蛋);
11,,,,,坏蛋=cur.left;
12,,,}
13,,,如果(! s.empty ()) {
14,,,,,坏蛋=s.top ();
15,,,,,s.pop ();
16,,,,,坏蛋=cur.right;
17,,,}
18,},,//循环结束!19}
>强,满足二者其一即可。
<强> 强>
<强> 强>
>强劲,这样就可以保证每次取栈顶元素的时候,左孩子在右孩子的前面被访问,左孩子和右孩子都在根节点的前面被访问。
空白PostOrderTraverse (BinaryTree根)
{
,,如果(null==root)
,,,,返回;
,,stack
,,s.push(根);
,以前,BinaryTree=零;
,,BinaryTree坏蛋;
,,而(! s.empty ())
,,{
,,,,坏蛋=s.top ();
,,,,如果(null==cur.lchild),,null==cur.rchild
,,,,,,| |(零!=前),,(pre==cur.lchild | |==以前cur.rchild)) {
,,,,,,打印cur.data;
,,,,s.pop ();
,,,,以前=坏蛋;
,,}
,,,,其他{
,,,,如果才能(零!=cur.rchild) {
,,,,,,,,s.push (cur.rchild);
,,,,,,}
,,,,,,如果(零!=cur.lchild) {
,,,,,,,,s.push (cur.lchild);
,,,,,,}
,,,,}
,}大敌;,//循环结束!
}