c语言实现,二叉排序树分裂为两棵二叉排序树
时间: 2023-12-03 08:40:27 浏览: 141
以下是C语言实现,将一棵二叉排序树分裂为两棵二叉排序树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 向二叉排序树中插入节点
void insert(TreeNode **root, int val) {
if (*root == NULL) {
*root = (TreeNode *)malloc(sizeof(TreeNode));
(*root)->val = val;
(*root)->left = NULL;
(*root)->right = NULL;
return;
}
if (val < (*root)->val) {
insert(&((*root)->left), val);
} else {
insert(&((*root)->right), val);
}
}
// 中序遍历二叉树
void inorder(TreeNode *root) {
if (root == NULL) {
return;
}
inorder(root->left);
printf("%d ", root->val);
inorder(root->right);
}
// 分裂二叉排序树
void split(TreeNode *root, int val, TreeNode **left, TreeNode **right) {
if (root == NULL) {
*left = NULL;
*right = NULL;
return;
}
if (root->val <= val) {
*left = root;
split(root->right, val, &((*left)->right), right);
} else {
*right = root;
split(root->left, val, left, &((*right)->left));
}
}
int main() {
TreeNode *root = NULL;
insert(&root, 5);
insert(&root, 3);
insert(&root, 7);
insert(&root, 1);
insert(&root, 4);
insert(&root, 6);
insert(&root, 8);
printf("原始二叉排序树:");
inorder(root);
printf("\n");
TreeNode *left = NULL;
TreeNode *right = NULL;
split(root, 4, &left, &right);
printf("分裂后的左子树:");
inorder(left);
printf("\n");
printf("分裂后的右子树:");
inorder(right);
printf("\n");
return 0;
}
```
阅读全文