c语言写一个输出一个二叉树任意节点r的所有祖先节点; 例如:二叉树为 a b c d e d节点的所有祖先节点为b a
时间: 2024-02-15 22:35:37 浏览: 67
好的,我可以帮您解答这个问题。
下面是C语言的代码实现,输出一个二叉树中节点r的所有祖先节点:
```c
struct BinaryTreeNode {
int value;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
};
void printAncestors(struct BinaryTreeNode* root, struct BinaryTreeNode* r) {
if (root == NULL) {
return;
}
if (root->left == r || root->right == r || root == r) {
printf("%d ", root->value);
return;
}
printAncestors(root->left, r);
printAncestors(root->right, r);
}
// 测试代码
int main() {
struct BinaryTreeNode* a = (struct BinaryTreeNode*)malloc(sizeof(struct BinaryTreeNode));
struct BinaryTreeNode* b = (struct BinaryTreeNode*)malloc(sizeof(struct BinaryTreeNode));
struct BinaryTreeNode* c = (struct BinaryTreeNode*)malloc(sizeof(struct BinaryTreeNode));
struct BinaryTreeNode* d = (struct BinaryTreeNode*)malloc(sizeof(struct BinaryTreeNode));
struct BinaryTreeNode* e = (struct BinaryTreeNode*)malloc(sizeof(struct BinaryTreeNode));
a->value = 1;
b->value = 2;
c->value = 3;
d->value = 4;
e->value = 5;
a->left = b;
a->right = c;
b->left = NULL;
b->right = NULL;
c->left = d;
c->right = e;
d->left = NULL;
d->right = NULL;
e->left = NULL;
e->right = NULL;
printAncestors(a, d); // 输出2 1
return 0;
}
```
上述代码中,先构建了一个二叉树,然后通过递归处理,打印二叉树中节点r的所有祖先节点。特别地,如果节点r是根节点或者一些叶子节点,则没有祖先节点,递归返回即可。
阅读全文
相关推荐


















