C语言用中根序列和先根序列构建一棵排序二叉树
时间: 2023-12-27 18:04:22 浏览: 74
用C语言编写二叉排序树
构建排序二叉树的方法是,先根据先根序列确定根节点,然后根据中根序列将左右子树分离出来,再分别对左右子树进行递归构建。
具体步骤如下:
1. 定义二叉树节点的结构体,包含节点值、左右子节点指针。
```
typedef struct TreeNode {
int value;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
2. 定义一个函数,根据先根序列和中根序列构建排序二叉树。
```
TreeNode *buildTree(int *preorder, int preorderSize, int *inorder, int inorderSize) {
if (preorderSize == 0) {
return NULL;
}
// 创建根节点
TreeNode *root = (TreeNode *) malloc(sizeof(TreeNode));
root->value = preorder[0];
root->left = NULL;
root->right = NULL;
// 在中根序列中找到根节点,并分离出左右子树
int i;
for (i = 0; i < inorderSize; i++) {
if (inorder[i] == preorder[0]) {
break;
}
}
// 递归构建左右子树
root->left = buildTree(preorder + 1, i, inorder, i);
root->right = buildTree(preorder + i + 1, preorderSize - i - 1, inorder + i + 1, inorderSize - i - 1);
return root;
}
```
3. 调用函数构建排序二叉树,并输出结果。
```
int main() {
int preorder[] = {5, 3, 2, 4, 7, 6, 8};
int inorder[] = {2, 3, 4, 5, 6, 7, 8};
int n = sizeof(preorder) / sizeof(int);
TreeNode *root = buildTree(preorder, n, inorder, n);
// 输出排序二叉树
printf("排序二叉树的中序遍历为:");
inorderTraversal(root);
printf("\n");
return 0;
}
```
阅读全文