二叉树前序、后序和后序遍历的非递归实现)

<强>二叉树前序、后序和后序遍历的非递归实现)

<强>

强,那么我们必须自己要有一个,用来。


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);

,,,,,,}

,,,,}

,}大敌;,//循环结束!

}

二叉树前序、后序和后序遍历的非递归实现)