二叉树的遍历(非递归)
Posted huayra
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的遍历(非递归)相关的知识,希望对你有一定的参考价值。
1 //二叉树的先序遍历(非递归) 2 public void PreOrderTraverse() 3 { 4 BiTNode p = this.root; 5 Stack stack = new Stack(10000); 6 7 while(!stack.isEmpty || p != null) 8 if(p != null) 9 { 10 if(p.rchild != null) 11 stack.push(p.rchild); 12 System.out.print(p.data + " "); 13 p = p.lchild; 14 } 15 else 16 { 17 p = stack.pop(); 18 } 19 } 20 21 //二叉树的中序遍历(非递归) 22 public void InOrderTraverse() 23 { 24 BiTNode p = this.root; 25 Stack stack = new Stack(10000); 26 27 while(!stack.isEmpty() || p != null) 28 if(p != null) 29 { 30 stack.push(p); 31 p = p.child; 32 } 33 else 34 { 35 p = stack.pop(); 36 System.out.print(p.data + " "); 37 p = p.lchild; 38 } 39 }
1 //二叉树的后序遍历(非递归) 2 public void PostOrderTraverse() 3 { 4 BiNode p = this.root; 5 Stack stack = new Stack(10000); 6 7 while(true) 8 { 9 if(p != null) 10 { 11 if(p.count == 0) 12 { 13 stack.push(p); 14 p = p.lchild; 15 } 16 else if(p.count == 1) 17 p = p.rchild; 18 else if(p.count == 2) 19 { 20 System.out.print(stack.pop().data + " "); 21 if(!stack.isEmpty()) 22 { 23 p = stack.getTop(); 24 p.count++; 25 } 26 else 27 break; //栈为空(根结点已出栈) 28 } 29 } 30 else //p = null 31 { 32 p = stack.getTop(); 33 p.count++; 34 if(p.count == 1) 35 p = p.rchild; 36 else if(p.count == 2) 37 { 38 System.out.print(stack.pop().data + " "); 39 if(!stack.isEmpty()) 40 { 41 p = stack.getTop(); 42 p.count++; 43 } 44 else 45 break; //栈为空(根结点已出栈) 46 } 47 } 48 } //while 49 }
以上是关于二叉树的遍历(非递归)的主要内容,如果未能解决你的问题,请参考以下文章