【正确答案】
【答案解析】该题可采用按后序遍历二叉树的非递归算法,当访问q结点时,结点栈中所有栈元素均为q结点的祖先。
#define MAX 1000
void Ancestor(BTTree*T,BTNode* q)
{
BTNode* s[MAX];//栈实现非递归
BTNode* P=T:
int b[MAX];
int top=-1:
do{
while(p)
{
s[++top]=P;
b[top]=0;
p=p->lchild;
}
if(top>-1 && b[top]=-1)
{
P=s[top];
if(p==q)
{
printf("q结点的祖先是:\n");
for(inti=0;i<=top;i++)
printf("%C",s[i]->data);
return;
}
else
top--;
}
if(top>-1)
{
P=s[top]->rchild;
b[top]=1;
}
}while(top>-1);
}