非递归后序遍历二叉树(1)

 1 void postOrder3(BinTree *root)     //非递归后序遍历

 2 {

 3     stack<BinTree*> s;

 4     BinTree *cur;                      //当前结点 

 5     BinTree *pre=NULL;                 //前一次访问的结点 

 6     s.push(root);

 7     while(!s.empty())

 8     {

 9         cur=s.top();

10         if((cur->lchild==NULL&&cur->rchild==NULL)||

11            (pre!=NULL&&(pre==cur->lchild||pre==cur->rchild)))

12         {

13             cout<<cur->data<<" ";  //如果当前结点没有孩子结点或者孩子节点都已被访问过 

14               s.pop();

15             pre=cur; 

16         }

17         else

18         {

19             if(cur->rchild!=NULL)

20                 s.push(cur->rchild);

21             if(cur->lchild!=NULL)    

22                 s.push(cur->lchild);

23         }

24     }    

25 }

http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html

你可能感兴趣的:(二叉树)