用C语言列出二叉树根到叶路径和等于sum的所有路径)
时间: 2025-02-16 12:13:30 浏览: 31
在C语言中,可以使用递归的方式来解决这个问题。首先,我们需要定义一个结构体来表示二叉树的节点,并且包含两个指针指向左孩子和右孩子。然后,我们可以编写一个函数`findPaths`,它接收一个节点指针、当前路径和目标和作为参数。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 辅助函数,用于递归添加路径值
int addPathSum(TreeNode* node, int sum, int path[]) {
if (node == NULL)
return 0;
// 如果到达叶子节点并且路径和等于目标,记录路径
if (node->left == NULL && node->right == NULL && sum == node->val)
path[pathIndex++] = node->val;
// 递归遍历左子树和右子树,更新路径和
int leftSum = addPathSum(node->left, sum + node->val, path);
int rightSum = addPathSum(node->right, sum + node->val, path);
return leftSum + rightSum;
}
// 主函数,找到所有根到叶路径和等于给定sum的路径
void findPathsWithSum(TreeNode* root, int targetSum) {
int path[] = {0};
int pathIndex = 0;
if (addPathSum(root, 0, path) > 0) {
for (int i = 0; i < pathIndex; ++i) {
printf("%d ", path[i]);
if (i != pathIndex - 1)
printf("->");
}
printf("\n");
}
}
// 创建一个简单的二叉树示例(这里仅作演示)
TreeNode* createTree() {
// 实现创建二叉树的逻辑...
}
int main() {
TreeNode* root = createTree();
int targetSum = 8; // 指定的目标路径和
findPathsWithSum(root, targetSum);
return 0;
}
```
这个程序会找出给定二叉树中所有从根到叶节点的路径,其路径元素之和等于`targetSum`。请注意,你需要自定义`createTree`函数来构建实际的二叉树。运行`main`函数后,你会看到满足条件的所有路径。
阅读全文