非递归后序遍历二叉树(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

原文地址:https://www.cnblogs.com/Fadinglemon/p/4235160.html