C语言打印出二叉树中结点值的和为输入整数的所有路径
时间: 2024-12-28 08:35:19 浏览: 12
在C语言中,为了找出二叉树中所有结点值之和等于给定整数的路径,你可以使用深度优先搜索(DFS)或广度优先搜索(BFS)。这里提供一种基于深度优先搜索的解决方案:
首先,你需要定义二叉树节点结构,并包含一个指向左右子节点的指针以及存储节点值的变量。假设节点结构体定义如下:
```c
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
接下来,创建一个函数来递归地查找满足条件的路径。这个函数会遍历每一层节点,如果当前节点加上父节点的值等于目标值,就记录下从根到当前节点的路径。
```c
void findPaths(TreeNode* root, int targetSum, int path[], int pathIndex) {
if (!root) return;
// 如果达到叶子节点,检查路径和是否为目标值
if (!root->left && !root->right) {
if (path[pathIndex] + root->val == targetSum) {
for (int i = 0; i < pathIndex + 1; ++i)
printf("%d ", path[i]);
puts("");
}
} else {
// 添加当前节点到路径,继续搜索
path[pathIndex++] = root->val;
findPaths(root->left, targetSum, path, pathIndex);
findPaths(root->right, targetSum, path, pathIndex);
// 回溯操作,移除当前节点
path[--pathIndex] = 0;
}
}
```
最后,在主函数中调用`findPaths`,传入根节点、目标和、空路径数组及初始路径索引0。
```c
int main() {
TreeNode* root = ... // 初始化你的二叉树
int targetSum = ...;
int path[100]; // 预计最长路径长度不超过100
findPaths(root, targetSum, path, 0);
return 0;
}
```
阅读全文