//求节点值为x的所有祖先节点
typedef struct{
BiTree t;
int tag; //tag=0表示左子女已被访问,tag=1表示右子女已被访问。
}stack;
void Search(BiTree bt,ElemType x){
stack s[];
top=0;
while(bt!=NULL||top>0){
while(bt!=NULL&&bt->data!=x){ //此时bt->data==x是在入栈时候发现了x节点,放弃继续将节点入栈。
s[++top].t=bt;
s[top].tag=0;
bt=bt->lchild;
}
if(bt->data==x){ //找到了x节点
for(int i=1;i<=top;i++){
printf(s[i].t->data);
}
exit(1);
}
while(top!=0&&s[top].tag==1){ //tag==1说明栈顶的右子女已被访问,可以出栈了。
top--;
}
if(top!=0){ //已访问左子树或左子树为空,则进入右子树。
s[top].tag=1;
bt=s[top].t->rchild;
}
}
}