上篇文章,我做了二叉树的各种遍历,其中包含了自己写的二叉树后序非递归遍历,正在测试正确性。这里附上书上的代码:
void postOrderTraverseStack(BTree T){
stack<BTree> s;
BTree p=T;
stack<int> is;
int flag;
if(T){
do{
while(p){
s.push(p);
is.push(0);
p=p->ltree;
}
p=s.top();
flag=is.top();
s.pop();
is.pop();
if(flag==0){
s.push(p);
is.push(1);
p=p->rtree;
}else{
cout<<p->data;
p=NULL;
}
}while(p||!s.empty());
}
}
书上的方法是定义两个栈,同时控制栈的进出,达到了对应的效果。这样能记录下一些信息