数据结构拓展习题:二叉树打印值为x结点的所有祖先
题目:假设二叉树bt采用二叉链表存储,在二叉树bt中查找值为x的结点,试编写算法打印值为x的结点的所有祖先,假设值为x的结点不多于一个。



typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
int PrintAncestors(BiTree T, TElemType x)
{
if (T == NULL)//先判断二叉树是否为空
return 0;
if (T->data == x) //判断二叉树根节点是否为所要查找的结点
return 1;
//如果一棵二叉树的左孩子或右孩子里面有所要查询的结点
//那么该二叉树的根节点就是我们要找的值为x的结点的祖先
if (PrintAncestors(T->lchild, x) || PrintAncestors(T->rchild, x))
{
printf("%d ", T->data);
return 1;
}
else
return 0;
}