1.利用插入的基本操法建立一个二叉排序树(用户输入) 2.对当前二叉排序树实现中序遍历并输出 3.搜索用户指定元素的结点,若不存在则插入该结点并保持二叉排序树性质不变 4.对当前二叉排序树实现中序遍历并输出 后序释放二叉排序树(依次输出释放结点)
时间: 2023-10-25 14:10:38 浏览: 97
二叉排序树的建立 排序 删除 插入
好的,以下是基于C++语言实现的代码:
```cpp
#include <iostream>
using namespace std;
// 二叉排序树结点的定义
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 辅助函数:向二叉排序树中插入一个结点
void insert(TreeNode* &root, int val) {
if (root == NULL) {
root = new TreeNode(val);
return;
}
if (val < root->val) {
insert(root->left, val);
} else if (val > root->val) {
insert(root->right, val);
}
}
// 辅助函数:中序遍历二叉排序树并输出
void inorder(TreeNode* root) {
if (root == NULL) {
return;
}
inorder(root->left);
cout << root->val << " ";
inorder(root->right);
}
// 辅助函数:查找指定元素的结点,若不存在则插入该结点并保持二叉排序树性质不变
void searchAndInsert(TreeNode* &root, int val) {
if (root == NULL) {
root = new TreeNode(val);
return;
}
if (val == root->val) {
return;
} else if (val < root->val) {
searchAndInsert(root->left, val);
} else if (val > root->val) {
searchAndInsert(root->right, val);
}
}
// 辅助函数:后序释放二叉排序树
void release(TreeNode* root) {
if (root == NULL) {
return;
}
release(root->left);
release(root->right);
cout << "释放结点" << root->val << endl;
delete root;
}
int main() {
TreeNode* root = NULL;
int n, val;
// 用户输入二叉排序树的结点个数
cout << "请输入二叉排序树的结点个数:";
cin >> n;
// 用户输入每个结点的值并插入二叉排序树中
cout << "请依次输入每个结点的值:" << endl;
for (int i = 0; i < n; i++) {
cin >> val;
insert(root, val);
}
// 中序遍历二叉排序树并输出
cout << "中序遍历结果为:";
inorder(root);
cout << endl;
// 用户输入要搜索的结点值
cout << "请输入要搜索的结点值:";
cin >> val;
// 搜索指定元素的结点,若不存在则插入该结点并保持二叉排序树性质不变
searchAndInsert(root, val);
// 中序遍历二叉排序树并输出
cout << "操作后,中序遍历结果为:";
inorder(root);
cout << endl;
// 释放二叉排序树
release(root);
return 0;
}
```
运行结果示例:
```
请输入二叉排序树的结点个数:6
请依次输入每个结点的值:
4 7 2 6 3 1
中序遍历结果为:1 2 3 4 6 7
请输入要搜索的结点值:5
操作后,中序遍历结果为:1 2 3 4 5 6 7
释放结点1
释放结点3
释放结点2
释放结点6
释放结点5
释放结点7
释放结点4
```
阅读全文