void Search(BiTree T,ElemType x)
{
BTNode *p=T,r=NULL;
Stack S;
InitStack(S);
while(p!=NULL||!IsEmpty(S))
{
if(p&&p->data!=x)
{
Push(S,p);
p=p->lchild;
}
else if(p->data==x)
{
for(i=1,i<=S.top;i++)
{
printf("%d",Pop(S));
return;
}
}
else
{
GetTop(S,p);
if(p->rchild&&p->rchild!=r&&p->rchild->data!=x)
{
p=p->rchild;
Push(S,p);
p=p->lchild;
}
else if(p->rchild->data==x)
{
for(i=1,i<=S.top;i++)
{
printf("%d",Pop(S));
return;
}
}
else
{
Pop(S,p);
r=p;
p=NULL;
}
}
}
}