用C语言求二叉树上结点的路径
时间: 2024-02-06 20:10:22 浏览: 79
使用C语言求二叉树结点的最低公共祖先的方法
假设二叉树的结点定义如下:
```
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
```
那么求二叉树上结点的路径可以通过递归实现,具体步骤如下:
1. 首先判断当前结点是否为空,若为空则返回。
2. 将当前结点的值加入路径中。
3. 若当前结点为目标结点,则输出路径。
4. 否则递归遍历左子树和右子树,分别将左子树和右子树的结果加入路径中,最后将当前结点从路径中删除。
下面是代码实现:
```c
void findPath(struct TreeNode* root, int target, int* path, int* pathLen) {
if (root == NULL) return;
path[*pathLen] = root->val; // 将当前结点加入路径
(*pathLen)++;
if (root->val == target) { // 若当前结点为目标结点,则输出路径
for (int i = 0; i < *pathLen; i++) {
printf("%d ", path[i]);
}
printf("\n");
} else {
findPath(root->left, target, path, pathLen); // 遍历左子树
findPath(root->right, target, path, pathLen); // 遍历右子树
}
(*pathLen)--; // 删除当前结点
}
```
其中,`path` 数组用于存储路径,`pathLen` 表示当前路径长度。调用该函数时,需要传入根结点、目标结点、`path` 数组和 `pathLen` 变量的地址。比如:
```c
int main() {
struct TreeNode node1 = {1, NULL, NULL};
struct TreeNode node2 = {2, &node1, NULL};
struct TreeNode node3 = {3, &node2, NULL};
struct TreeNode node4 = {4, NULL, &node3};
struct TreeNode node5 = {5, &node4, NULL};
struct TreeNode node6 = {6, NULL, &node5};
int path[100];
int pathLen = 0;
findPath(&node6, 1, path, &pathLen);
return 0;
}
```
上述代码输出的是从根结点到值为 1 的结点的路径。
阅读全文