求二叉树指定结点到根的路径c语言,建立二叉树并求指定结点路径.doc
时间: 2024-03-06 11:48:59 浏览: 64
好的,我可以帮你回答这个问题。下面是一份求二叉树指定结点到根的路径C语言代码,同时还包括了建立二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 创建新节点
struct TreeNode* createNode(int val) {
struct TreeNode* newNode = (struct TreeNode*) malloc(sizeof(struct TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 建立二叉树
struct TreeNode* createTree() {
struct TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
return root;
}
// 求指定结点到根的路径
int findPath(struct TreeNode* root, int val, int path[]) {
if (root == NULL) {
return 0;
}
if (root->val == val) {
path[0] = root->val;
return 1;
}
int left = findPath(root->left, val, path);
int right = findPath(root->right, val, path);
if (left || right) {
path[left + right] = root->val;
return left + right + 1;
}
return 0;
}
// 主函数
int main() {
int path[100];
struct TreeNode* root = createTree();
int val = 5;
int len = findPath(root, val, path);
printf("路径为:");
for (int i = len - 1; i >= 0; i--) {
printf("%d ", path[i]);
}
return 0;
}
```
以上代码中,`createNode` 函数用于创建新的二叉树节点,`createTree` 函数用于按照题目要求建立二叉树,`findPath` 函数用于求指定结点到根的路径。在 `main` 函数中,我们可以指定要求哪个结点的路径,并且输出这个路径。
希望这份代码可以帮助到你!
阅读全文