任意给定一组数据,设计一个算法,建立一棵二叉排序树,对它进行查找、插入、删除等操作。c++代码
时间: 2024-02-22 12:55:46 浏览: 80
好的,以下是基于C++的二叉搜索树的实现:
```c++
#include <iostream>
using namespace std;
// 二叉搜索树节点结构体
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 二叉搜索树类
class BST {
public:
BST() {
root = NULL;
}
// 插入节点
void insert(int val) {
root = insertHelper(root, val);
}
// 删除节点
void remove(int val) {
root = removeHelper(root, val);
}
// 查找节点
bool search(int val) {
TreeNode *node = searchHelper(root, val);
if (node == NULL) {
return false;
} else {
return true;
}
}
// 中序遍历
void inorderTraversal() {
inorderHelper(root);
cout << endl;
}
private:
TreeNode *root;
// 插入节点辅助函数
TreeNode* insertHelper(TreeNode* node, int val) {
if (node == NULL) {
return new TreeNode(val);
}
if (val < node->val) {
node->left = insertHelper(node->left, val);
} else if (val > node->val) {
node->right = insertHelper(node->right, val);
}
return node;
}
// 删除节点辅助函数
TreeNode* removeHelper(TreeNode* node, int val) {
if (node == NULL) {
return NULL;
}
if (val < node->val) {
node->left = removeHelper(node->left, val);
} else if (val > node->val) {
node->right = removeHelper(node->right, val);
} else {
if (node->left == NULL) {
TreeNode *right = node->right;
delete node;
return right;
} else if (node->right == NULL) {
TreeNode *left = node->left;
delete node;
return left;
} else {
TreeNode *minNode = findMin(node->right);
node->val = minNode->val;
node->right = removeHelper(node->right, minNode->val);
}
}
return node;
}
// 查找节点辅助函数
TreeNode* searchHelper(TreeNode* node, int val) {
if (node == NULL || node->val == val) {
return node;
}
if (val < node->val) {
return searchHelper(node->left, val);
} else {
return searchHelper(node->right, val);
}
}
// 中序遍历辅助函数
void inorderHelper(TreeNode* node) {
if (node != NULL) {
inorderHelper(node->left);
cout << node->val << " ";
inorderHelper(node->right);
}
}
// 查找子树中最小节点
TreeNode* findMin(TreeNode* node) {
while (node->left != NULL) {
node = node->left;
}
return node;
}
};
int main() {
BST bst;
bst.insert(5);
bst.insert(3);
bst.insert(8);
bst.insert(1);
bst.insert(4);
bst.insert(7);
bst.insert(10);
cout << "中序遍历:" << endl;
bst.inorderTraversal();
cout << "删除节点 7:" << endl;
bst.remove(7);
bst.inorderTraversal();
cout << "查找节点 8:" << endl;
if (bst.search(8)) {
cout << "存在" << endl;
} else {
cout << "不存在" << endl;
}
cout << "查找节点 2:" << endl;
if (bst.search(2)) {
cout << "存在" << endl;
} else {
cout << "不存在" << endl;
}
return 0;
}
```
输出结果:
```
中序遍历:
1 3 4 5 7 8 10
删除节点 7:
1 3 4 5 8 10
查找节点 8:
存在
查找节点 2:
不存在
```
阅读全文