c++编写二叉排序树的操作函数,并在main主函数中依次调用基本操作函数注意事项
时间: 2024-02-13 14:02:20 浏览: 60
好的,下面是二叉排序树的基本操作函数的 C++ 实现:
```cpp
#include <iostream>
using namespace std;
// 二叉排序树的节点结构体
struct BSTNode {
int val;
BSTNode *left, *right;
BSTNode(int v): val(v), left(NULL), right(NULL) {}
};
// 插入节点
void insert(BSTNode *&root, int val) {
if (!root) {
root = new BSTNode(val);
return;
}
if (val < root->val) {
insert(root->left, val);
} else {
insert(root->right, val);
}
}
// 查找节点
BSTNode* search(BSTNode *root, int val) {
if (!root) {
return NULL;
}
if (root->val == val) {
return root;
}
if (val < root->val) {
return search(root->left, val);
} else {
return search(root->right, val);
}
}
// 找到最小节点
BSTNode* findMin(BSTNode *root) {
if (!root) {
return NULL;
}
while (root->left) {
root = root->left;
}
return root;
}
// 删除节点
void remove(BSTNode *&root, int val) {
if (!root) {
return;
}
if (val < root->val) {
remove(root->left, val);
} else if (val > root->val) {
remove(root->right, val);
} else if (root->left && root->right) {
root->val = findMin(root->right)->val;
remove(root->right, root->val);
} else {
BSTNode *tmp = root;
root = (root->left) ? root->left : root->right;
delete tmp;
}
}
// 中序遍历
void inorder(BSTNode *root) {
if (!root) {
return;
}
inorder(root->left);
cout << root->val << " ";
inorder(root->right);
}
// 主函数
int main() {
BSTNode *root = NULL;
insert(root, 5);
insert(root, 2);
insert(root, 8);
insert(root, 1);
insert(root, 4);
insert(root, 6);
insert(root, 9);
cout << "中序遍历结果为:";
inorder(root);
cout << endl;
BSTNode *p = search(root, 6);
if (p) {
cout << "找到了值为6的节点" << endl;
} else {
cout << "没找到值为6的节点" << endl;
}
remove(root, 2);
cout << "删除节点2后的中序遍历结果为:";
inorder(root);
cout << endl;
return 0;
}
```
在主函数中,依次调用了插入节点、中序遍历、查找节点、删除节点等基本操作函数,最终输出了中序遍历结果。注意,在删除节点时,如果被删除的节点有两个子节点,则需要找到它的右子树中的最小节点来替换它,这里使用了 `findMin` 函数来实现。
阅读全文