【问题描述】 从标准输入中输入一组整数构造一棵二叉树(二叉查找树),有序输出该查找树中所有大于a且小于b的元素。 例如,若按照以下顺序输入一组整数:50、38、30、64、58、40、10、73、70、50、60、100、35,则生成下面的二叉树(二叉查找树): image.png 【输入形式】 先从标准输入读取整数的个数,然后第二行开始输入各个整数,整数之间以一个空格分隔。 第三行输入数据a、b,之间以一个空格分隔。 【样例输入】 13 50 38 30 64 58 40 10 73 70 50 60 100 35 36 48 【样例输出】 38 40 【样例说明】 共13个数据,第二行依次输入数据值,第三行输入查询二叉查找树中满足36与48之间的所有元素
时间: 2024-02-17 18:03:41 浏览: 67
将已知数组元素构造一棵二叉树
5星 · 资源好评率100%
以下是该问题的一个可能的C++实现,使用了二叉查找树(BST)数据结构:
```c++
#include <iostream>
using namespace std;
// 二叉查找树的节点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int v): val(v), left(nullptr), right(nullptr) {}
};
// 将一个整数插入二叉查找树中
void insert(TreeNode*& root, int val) {
if (!root) {
root = new TreeNode(val);
} else if (val < root->val) {
insert(root->left, val);
} else {
insert(root->right, val);
}
}
// 在二叉查找树中查找所有大于a且小于b的节点,并输出
void search(TreeNode* root, int a, int b) {
if (!root) {
return;
}
if (root->val > a) {
search(root->left, a, b);
}
if (root->val > a && root->val < b) {
cout << root->val << " ";
}
if (root->val < b) {
search(root->right, a, b);
}
}
int main() {
int n, a, b;
cin >> n;
TreeNode* root = nullptr;
for (int i = 0; i < n; i++) {
int val;
cin >> val;
insert(root, val);
}
cin >> a >> b;
search(root, a, b);
cout << endl;
return 0;
}
```
输入样例和输出样例与题目描述中的一致。
阅读全文