在 C 语言中,若要列出所有祖先节点,通常需要先定义一个数据结构来表示树,
然后递归地从每个节点开始向上遍历直到根节点。以下是实现这一功能的代码示
例:
#include <stdio.h>
// 假设我们有一个二叉树的节点结构体如下
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 函数用于打印从根节点到当前节点的所有祖先
void printAncestors(TreeNode *root, TreeNode *node) {
if (root == NULL || node == NULL) {
return;
}
// 创建一个用于存储祖先节点的数组
TreeNode *ancestors[100]; // 假设祖先节点不超过 100 个
int top = -1;
// 从根节点开始,一直遍历到目标节点
while (1) {
// 如果当前节点是目标节点,则打印所有祖先并退出循环
if (root == node) {
for (int i = 0; i <= top; i++) {
printf("%d ", ancestors[i]->data);
}
printf("%d", root->data);
break;
}
// 如果目标节点在左子树中,将其压栈并向左移动
if (node->data < root->data) {
ancestors[++top] = root;
root = root->left;
} else if (node->data > root->data) { // 如果目标节点在右子树中,向
右移动
ancestors[++top] = root;
root = root->right;
}
}