C语言输出每个叶子结点到根节点的路径
时间: 2023-12-29 08:05:21 浏览: 121
要输出每个叶子结点到根节点的路径,可以使用深度优先搜索(DFS)算法。具体步骤如下:
1. 定义一个结构体来表示二叉树的结点:
```
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
```
2. 定义一个数组 `path` 来保存路径上的结点值,以及一个变量 `pathLen` 来表示当前路径长度。
```
int path[1000]; // 假设二叉树的结点数不超过 1000
int pathLen = 0;
```
3. 定义一个函数 `dfs`,它的参数为当前结点 `root` 和当前路径长度 `pathLen`。在函数中,先将当前结点加入路径中,然后判断当前结点是否为叶子结点。如果是叶子结点,则输出路径上的所有结点值;否则,递归遍历左右子树。
```
void dfs(struct TreeNode* root, int pathLen) {
if (root == NULL) {
return;
}
path[pathLen] = root->val;
pathLen++;
if (root->left == NULL && root->right == NULL) {
// 叶子结点,输出路径
for (int i = pathLen - 1; i >= 0; i--) {
printf("%d ", path[i]);
}
printf("\n");
} else {
dfs(root->left, pathLen);
dfs(root->right, pathLen);
}
}
```
4. 在主函数中调用 `dfs` 函数,并将根节点和初始路径长度 0 作为参数传入。
```
int main() {
struct TreeNode* root = ...; // 假设已经构建好了二叉树
dfs(root, 0);
return 0;
}
```
完整代码如下:
```
#include <stdio.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
int path[1000];
int pathLen = 0;
void dfs(struct TreeNode* root, int pathLen) {
if (root == NULL) {
return;
}
path[pathLen] = root->val;
pathLen++;
if (root->left == NULL && root->right == NULL) {
// 叶子结点,输出路径
for (int i = pathLen - 1; i >= 0; i--) {
printf("%d ", path[i]);
}
printf("\n");
} else {
dfs(root->left, pathLen);
dfs(root->right, pathLen);
}
}
int main() {
// 构建二叉树
struct TreeNode n1 = {1, NULL, NULL};
struct TreeNode n4 = {4, NULL, NULL};
struct TreeNode n5 = {5, NULL, NULL};
struct TreeNode n2 = {2, &n1, &n4};
struct TreeNode n3 = {3, &n5, NULL};
struct TreeNode root = {6, &n2, &n3};
// 输出每个叶子结点到根节点的路径
dfs(&root, 0);
return 0;
}
```
阅读全文