如何使用c语言根据先序遍历结果建立二叉搜索树
时间: 2023-12-19 22:04:34 浏览: 83
建立二叉搜索树的过程可以通过递归实现,实现过程如下:
1. 如果先序遍历结果为空,则返回 NULL。
2. 创建一个新节点,将第一个元素作为根节点的值。
3. 从第二个元素开始,找到第一个大于根节点值的元素,将该元素的位置记为 i。
4. 递归调用函数,将左子树的先序遍历结果作为参数,返回的结果作为根节点的左子树。
5. 递归调用函数,将右子树的先序遍历结果作为参数,返回的结果作为根节点的右子树。
6. 返回根节点。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* buildTree(int* preorder, int preorderSize){
if(preorderSize == 0) return NULL;
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = preorder[0];
int i = 1;
while(i < preorderSize && preorder[i] < root->val) {
i++;
}
root->left = buildTree(preorder + 1, i - 1);
root->right = buildTree(preorder + i, preorderSize - i);
return root;
}
void inorderTraversal(struct TreeNode* root){
if(root == NULL) return;
inorderTraversal(root->left);
printf("%d ", root->val);
inorderTraversal(root->right);
}
int main(){
int preorder[] = {8, 3, 1, 6, 4, 7, 10, 14, 13};
int preorderSize = sizeof(preorder) / sizeof(int);
struct TreeNode* root = buildTree(preorder, preorderSize);
inorderTraversal(root);
return 0;
}
```
以上代码实现了根据先序遍历结果建立二叉搜索树,并且输出中序遍历结果。
阅读全文