用c语言输出二叉树中从每个叶子结点到根结点的路径
时间: 2024-11-06 10:17:37 浏览: 69
二叉树的指定结点路径
在C语言中,要输出二叉树中从每个叶子节点到根节点的路径,可以采用深度优先搜索(Depth-First Search, DFS),具体步骤如下:
1. 定义结构体表示二叉树节点,包含值、左孩子和右孩子的指针。
2. 编写递归函数`DFS`,该函数接收当前节点作为参数。
3. 在`DFS`函数中,判断当前节点是否为空,如果为空则直接返回;如果不为空,先判断是否是叶子节点(即左右子节点都为空)。
4. 如果是叶子节点,将当前节点的值添加到路径数组中,并继续对父节点进行DFS,直到到达根节点。在回溯过程中,记得逐层添加节点值到路径数组。
5. 当遍历完所有叶子节点并返回到根节点时,输出完整的路径。
下面是一个简单的示例代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
void addPathToRoot(TreeNode* node, char path[], int index) {
if (node == NULL) return;
// 如果达到叶子节点
if (node->left == NULL && node->right == NULL) {
path[index] = node->val + '0'; // 为了区分字符,加个字符编码
index++;
printf("%d ", path); // 输出路径
addPathToRoot(node->parent, path, index); // 回溯到上一级
} else {
path[index] = ',';
index++;
// 遍历子节点
if (node->left) addPathToRoot(node->left, path, index);
if (node->right) addPathToRoot(node->right, path, index);
}
}
// 构建二叉树(这里仅做示意,实际应用中需要提供构建函数)
TreeNode* buildTree() { ... }
int main() {
TreeNode* root = buildTree();
char path[100];
path[0] = '\0'; // 初始化路径字符串
// 从根节点开始遍历
addPathToRoot(root, path, 0);
printf("\nPaths from leaf nodes to the root:\n%s", path);
return 0;
}
```
阅读全文