使用C语言实现根据前序遍历和中序遍历创建二叉树的代码
时间: 2023-11-20 14:04:55 浏览: 90
以下是使用C语言实现根据前序遍历和中序遍历创建二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
int search(int* arr, int start, int end, int val) {
for (int i = start; i <= end; i++) {
if (arr[i] == val) {
return i;
}
}
return -1;
}
struct TreeNode* buildTreeHelper(int* preorder, int pre_start, int pre_end,
int* inorder, int in_start, int in_end) {
if (pre_start > pre_end || in_start > in_end) {
return NULL;
}
int root_val = preorder[pre_start];
int root_index = search(inorder, in_start, in_end, root_val);
struct TreeNode* root = malloc(sizeof(struct TreeNode));
root->val = root_val;
root->left = buildTreeHelper(preorder, pre_start + 1, pre_start + root_index - in_start,
inorder, in_start, root_index - 1);
root->right = buildTreeHelper(preorder, pre_start + root_index - in_start + 1, pre_end,
inorder, root_index + 1, in_end);
return root;
}
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize) {
return buildTreeHelper(preorder, 0, preorderSize - 1, inorder, 0, inorderSize - 1);
}
void printTree(struct TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
printTree(root->left);
printTree(root->right);
}
int main() {
int preorder[] = {3, 9, 20, 15, 7};
int inorder[] = {9, 3, 15, 20, 7};
int size = sizeof(preorder) / sizeof(int);
struct TreeNode* root = buildTree(preorder, size, inorder, size);
printf("Preorder traversal: ");
printTree(root);
return 0;
}
```
该程序使用了递归的方法,其中 `buildTreeHelper` 函数为递归函数,用于构建二叉树。该函数接受前序遍历数组、中序遍历数组以及它们的起始和结束索引作为参数,返回构建好的二叉树。
程序中还包括了 `search` 函数,用于在中序遍历数组中查找根节点的位置。
最后,程序使用 `printTree` 函数对构建好的二叉树进行前序遍历打印,以验证二叉树构建的正确性。
阅读全文