二叉树输出根节点到p的路径,c语言实现
时间: 2024-12-22 19:22:11 浏览: 4
在C语言中,我们可以使用递归的方式来实现二叉树从根节点到任意节点P的路径输出。首先假设我们有一个简单的二叉树结构,每个节点都有指向左孩子和右孩子的指针,以及一个值。下面是递归函数的实现:
```c
#include <stdio.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 输出路径的辅助函数
void printPathHelper(TreeNode* node, int path[], int pathLen) {
if (node == NULL) return;
// 将当前节点的值添加到路径数组中
path[pathLen] = node->val;
pathLen++;
// 递归打印左子树和右子树
printPathHelper(node->left, path, pathLen);
printPathHelper(node->right, path, pathLen);
// 打印路径到叶子节点,然后回溯
for (int i = pathLen - 1; i >= 0; i--) {
printf("%d ", path[i]);
}
}
// 获取从根节点到给定节点的路径并输出
void printPathToNode(TreeNode* root, TreeNode* p) {
int path[50]; // 预估最大路径长度,一般二叉树不会超过这个长度
int pathLen = 0;
printPathHelper(root, path, pathLen);
// 如果p等于root,说明路径直接到达根,无需打印
if (p != root) {
printf("%d ->", p->val); // 打印从根到目标节点的路径
printPathHelper(p, path, pathLen); // 输出剩余路径
}
}
// 示例:二叉树节点初始化
TreeNode* createTree(int values[], int n) {
// ... 实现创建二叉树的代码 ...
}
int main() {
int values[] = {1, 2, 3, 4, 5};
TreeNode* root = createTree(values, sizeof(values)/sizeof(values[0])); // 创建二叉树
TreeNode* p = findNode(root, 4); // 查找节点4
printPathToNode(root, p);
return 0;
}
```
在这个示例中,`printPathHelper()`递归地构建路径,而`printPathToNode()`则调用该辅助函数并根据需要输出从根到目标节点的完整路径。
阅读全文