用C语言:假设二叉树采用二叉链存储结构,设计一个算法输出值为x的结点的所有祖先(结点x唯一)。给出测试函数
时间: 2024-03-14 16:45:07 浏览: 81
设二叉树采用链式存储结构,试设计一个算法计算一颗给定二叉树叶子节点的数目
5星 · 资源好评率100%
以下是完整的用C语言实现的代码,包括算法和测试函数:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode {
int data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void Ancestors(BiTree T, int x) {
if (T) {
if (T->data == x) {
return;
}
if (T->lchild && T->lchild->data == x || T->rchild && T->rchild->data == x) {
printf("%d ", T->data);
return;
}
Ancestors(T->lchild, x);
Ancestors(T->rchild, x);
}
}
void CreateBiTree(BiTree *T) {
int data;
scanf("%d", &data);
if (data == 0) {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = data;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
int main() {
BiTree T;
int x;
printf("请输入二叉树的结点值,0表示空结点:\n");
CreateBiTree(&T);
printf("请输入要查找的结点值:\n");
scanf("%d", &x);
printf("结点%d的所有祖先为:", x);
Ancestors(T, x);
printf("\n");
return 0;
}
```
测试函数中,首先构造二叉树,然后输入要查找的结点值 x,最后调用 Ancestors 函数输出值为 x 的结点的所有祖先。
阅读全文