用C语言编写一个完整的函数,运用先序序列给{34,18,76,52,13,67,82,25,58,91,73,20}创建二叉树
时间: 2024-11-27 19:07:27 浏览: 10
在C语言中,我们可以使用递归的方式来构建一个二叉搜索树(BST)。这里是一个简单的先序遍历创建二叉树的例子,我们将节点结构体和相关的函数一起展示:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} Node;
// 创建一个新的节点
Node* create_node(int value) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
node->left = NULL;
node->right = NULL;
return node;
}
// 先序遍历并构造二叉树
Node* build_bst(int arr[], int start, int end) {
if (start > end)
return NULL;
// 找到数组中间的元素作为根节点
int mid = (start + end) / 2;
Node* root = create_node(arr[mid]);
// 将左子树建立在左半部分数组上
root->left = build_bst(arr, start, mid - 1);
// 将右子树建立在右半部分数组上
root->right = build_bst(arr, mid + 1, end);
return root;
}
// 测试函数
void print_preorder(Node* root) {
if (root != NULL) {
printf("%d ", root->data);
print_preorder(root->left);
print_preorder(root->right);
}
}
int main() {
int arr[] = {34, 18, 76, 52, 13, 67, 82, 25, 58, 91, 73, 20};
int n = sizeof(arr) / sizeof(arr[0]);
Node* root = build_bst(arr, 0, n - 1);
printf("Preorder traversal of the BST:\n");
print_preorder(root);
free(root); // 释放内存
return 0;
}
```
在这个程序中,`build_bst`函数会递归地将数组划分为两部分,然后选择中间值作为当前节点,并将其放置于正确的位置。主函数`main`首先创建一个数组,然后调用`build_bst`构建BST,最后打印出先序遍历结果。
阅读全文