void Inorder(BiTree *T)
{
initstack(s);
BiTree *p=T;
while(p||!isempty(s))
{
if(p)
{
//visit(p)先序遍历在这里加visited(p)
push(s,p);
p=p->lchild;
}
else{
visit(p);
pop(s,p);
p=p->rchild;
}
}
}
中序非递归口诀:入栈向左一直走,出栈访问右子树。
后序遍历非递归口诀:入栈向左一直走,判定,出栈访问,标记重置。
void Inorder(BiTree *T)
{
initstack(s);
BiTree *p=T,*r=NULL;
while(p||!isempty(s))
{
if(p)
{
push(s,p);
p=p->lchild;
}
else{
Getstack(s,p);
if(p->rchild!=NULL||p->rchild!=r)
p=p->rchild;
else
{
pop(s,p)
visit(p);
r=p;
p=NULL;
}
}
}
}