这个二叉树节点的中序非递归遍历算法,好像和书上的并无两样,但它是我第一个自己看懂分析写出的,在书上看的时候,它好像怎么说就怎么实现了,我怎么就一下看不出,我做的时候是这么想的,首先写个只有左子树的树,写出它的算法,然后在用if语句,在适当的时候把某一个也是只含左子树的加进去,用if是不影响原来那个体系的,然后在试图多几个右支,也都是只含左支的右支,使在它双亲出栈后它就进展做和它双亲同样的工作。。。依次扩大,扩充,最后到任意……
void inorder_nonrecursive(BiTree T)
{
int j=0;
stack s;
BiTree p;
initstack(s);
p=NULL;
push(s,T);
while(!stackempty(s))
{
while(gettop(s,p)&&p)
{
push(s,p->lchild);
}
pop(s,p);
if(stackempty(s)) continue;
pop(s,p);printf("%d:/n",p->data);
if(p->rchild)push(s,p->rchild);
else push(s,NULL);
}
}