问题 问答题

假设在二叉树中值为x的结点不多于一个,试编写算法输出值为x的结点的所有祖先。

答案

参考答案:后序遍历最后访问根结点,当访问到值为X的结点时,栈中所有元素均为该结点的祖先,所以此题采用后序遍历进行访问。
typedef struct
{
BiTtee t:
int tag;
}stack;∥tag=0表示左子女被访问,tag=1表示右子女被访问void Search(BiTree bt,ElemType x)
∥在二叉树bt中,查找值为X的结点,并打印其所有祖先
{
stack s[]; ∥栈容量足够大
top=0;
while(bt!=null ‖ top>0)
{
while(bt!=null&&bt—>data!=x) ∥结点入栈
{
s[++top]0t=bt;
S[top].tag=0;
bt=bt—>lchild:
} ∥沿左分枝向下
if(bt—>data==x)
{
printf(“所查结点的所有祖先结点的值为:\n”); ∥找到x
for(i=1;i<=top;i++)
printf(s[i].t—>data);
return;
} /输出祖先值后结束
while(top!=0&&s[top].tag==1)
top——;∥退栈(空遍历)
if(top!=0)
{
s[top].tag=1;
bt=s[top].t—>rchild:
} ∥沿右分枝向下遍历
}
}

单项选择题
单项选择题