题目描述 给定一些在集合中添加元素、删除元素、查找元素的操作,要求用二叉查找树进行维护。用于维护集合的二叉查找树为传统的二叉查找树,不应进行平衡性维护。 如若添加已存在的元素或删除不存在的元素,则该操作不应产生影响。 对删除操作的约定:若要删除的节点为n,若n没有右子树,则n被其左子树替代,若n有右子树,其右子树的最小元素的节点为x,则n被x替代,x被x的右孩子替代。 输入格式 第一行一个整数 Q,表示操作个数。 接下来 Q行,每行一个操作。 + x表示添加元素x。 - x表示删除元素x。 * x表示查找元素x。 以上x均为正整数。 输出格式 对于查找操作,输出从根开始寻找到这个元素的路径,格式为: 开头一个字符*,之后从根开始,若元素在左子树中,则添加l,若在右子树中,则添加r。 如果元素未被查找到,输出Nothing.使用C++语言,多使用递归
时间: 2024-03-07 19:50:30 浏览: 32
以下是基于C++的代码实现,使用了递归来实现二叉查找树的添加、删除、查找操作,并按照要求输出查找路径。
```cpp
#include <iostream>
using namespace std;
// 二叉查找树节点定义
struct BSTNode {
int val;
BSTNode* left;
BSTNode* right;
BSTNode(int v) : val(v), left(nullptr), right(nullptr) {}
};
// 查找元素x在二叉查找树中的路径
string find(BSTNode* root, int x) {
if (root == nullptr) {
return "";
}
if (root->val == x) {
return "*";
}
if (x < root->val) {
string path = find(root->left, x);
if (path == "") {
return "";
}
return "l" + path;
} else {
string path = find(root->right, x);
if (path == "") {
return "";
}
return "r" + path;
}
}
// 向二叉查找树中添加元素x
void insert(BSTNode*& root, int x) {
if (root == nullptr) {
root = new BSTNode(x);
return;
}
if (x < root->val) {
insert(root->left, x);
} else if (x > root->val) {
insert(root->right, x);
}
}
// 删除二叉查找树中的元素x
void del(BSTNode*& root, int x) {
if (root == nullptr) {
return;
}
if (x < root->val) {
del(root->left, x);
} else if (x > root->val) {
del(root->right, x);
} else {
if (root->left == nullptr) {
BSTNode* temp = root;
root = root->right;
delete temp;
} else if (root->right == nullptr) {
BSTNode* temp = root;
root = root->left;
delete temp;
} else {
BSTNode* temp = root->right;
while (temp->left != nullptr) {
temp = temp->left;
}
root->val = temp->val;
del(root->right, temp->val);
}
}
}
int main() {
int Q;
cin >> Q;
BSTNode* root = nullptr; // 二叉查找树的根节点
while (Q--) {
char op;
int x;
cin >> op >> x;
if (op == '+') {
insert(root, x);
} else if (op == '-') {
del(root, x);
} else if (op == '*') {
string path = find(root, x);
if (path == "") {
cout << "Nothing." << endl;
} else {
cout << "*" << path << endl;
}
}
}
return 0;
}
```
相关推荐
![ZIP](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)