树的非递归后序遍历算法实现
算法思想:
1.沿着左孩子,依次入栈,直到左边孩子为空。
2.读栈顶元素,若右孩子不空且未访问过,则右孩子入栈,转步骤1;否则,栈顶元素出栈并访问。
代码实现:
void PostOrder(BiTree T){
InitStack(S);//初始化一个栈
BiTNode *p = T;
BiTNode *r = NULL;
while(p||!IsEmpty(S)){
if(p){
Push(S,p);
p = p->lchild;
}else{
GetTop(S,p);
if(p->rchild&&p->rchild!=r)
p = p->rchild;
else{
Pop(S,p);
visit(p);
r = p;
p = nullptr;
}
}//else
}//while
}