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