程序代码:
void search(BiTree bt,BiTNode *ch)
{
BiTNode *stack[num];
int tag[num];
int i,top;
int find;
BiTNode *s;
find=FALSE;
top=0;
s=bt;
do
{
while(s!=NULL)
{
top++;
stack[top]=s;
tag[top]=0;
s=s->lchild;
}
if(top>0)
{
s=stack[top];
if(tag[top]==1)
{if(s==ch)
{
for(i=1;i<=top;i++)
printf("->%c",stack[i]->data);
find=TRUE;
}
else
top--;
s=stack[top];
}
if(top>0 && !find)
{
if(tag[top]!=1)
{
s=s->rchild;
tag[top]=1;
}
else
s=NULL;
}
}
}while(!find && top!=0);
}
{
BiTNode *stack[num];
int tag[num];
int i,top;
int find;
BiTNode *s;
find=FALSE;
top=0;
s=bt;
do
{
while(s!=NULL)
{
top++;
stack[top]=s;
tag[top]=0;
s=s->lchild;
}
if(top>0)
{
s=stack[top];
if(tag[top]==1)
{if(s==ch)
{
for(i=1;i<=top;i++)
printf("->%c",stack[i]->data);
find=TRUE;
}
else
top--;
s=stack[top];
}
if(top>0 && !find)
{
if(tag[top]!=1)
{
s=s->rchild;
tag[top]=1;
}
else
s=NULL;
}
}
}while(!find && top!=0);
}