用c语言实现输出二叉链表中根结点到其他叶子结点的路径
时间: 2025-01-25 13:15:06 浏览: 48
好的,我来为您介绍如何使用C语言实现输出二叉链表中根结点到其他叶子结点的路径。
以下是实现这个功能的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点结构
struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
};
// 创建新结点
struct TreeNode* createNode(int data) {
struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// 打印根节点到叶子节点的路径
void printPaths(struct TreeNode* root, int path[], int pathLen) {
if (root == NULL)
return;
// 将当前节点添加到路径数组中
path[pathLen] = root->data;
pathLen++;
// 如果是叶子节点,打印路径
if (root->left == NULL && root->right == NULL) {
printf("路径: ");
for (int i = 0; i < pathLen; i++)
printf("%d ", path[i]);
printf("\n");
} else {
// 递归遍历左子树和右子树
printPaths(root->left, path, pathLen);
printPaths(root->right, path, pathLen);
}
}
// 主函数
int main() {
// 创建示例二叉树
struct TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// 存储路径的数组
int path[1000];
// 打印所有根节点到叶子节点的路径
printPaths(root, path, 0);
return 0;
}
```
这段代码的主要思路如下:
1. 定义二叉树结点结构体 `TreeNode`,包含数据域和左右子节点指针。
2. 实现 `createNode` 函数用于创建新结点。
3. 实现 `printPaths` 函数递归遍历二叉树,并打印从根节点到叶子节点的路径。
4. 在 `main` 函数中创建一个示例二叉树,并调用 `printPaths` 函数。
5. 使用一个数组 `path` 来存储当前路径上的节点值。
6. 当到达叶子节点时,打印数组 `path` 中存储的路径。
7. 递归遍历左子树和右子树,重复上述过程。
这个实现方法的时间复杂度是 O(n),其中 n 是二叉树的节点数,因为每个节点只被访问一次。空间复杂度在最坏情况下是 O(n),当二叉树退化成链表时。
阅读全文
相关推荐



















