二叉链表作为存储结构,输入键值序列建立一棵二叉排序树,实现查找的代码
时间: 2024-03-10 14:44:07 浏览: 63
好的,我来为您提供一个基于二叉链表的二叉排序树的查找代码。
首先,我们需要定义二叉排序树的节点结构:
```c++
struct BSTNode {
int val;
BSTNode* left;
BSTNode* right;
BSTNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
然后,我们可以定义一个函数 `insert`,用于向二叉排序树中插入节点。这个函数的实现如下:
```c++
void insert(BSTNode*& root, int val) {
if (root == nullptr) {
root = new BSTNode(val);
return;
}
if (val < root->val) {
insert(root->left, val);
} else {
insert(root->right, val);
}
}
```
接下来,我们可以定义一个函数 `search`,用于在二叉排序树中查找值为 `val` 的节点。这个函数的实现如下:
```c++
BSTNode* search(BSTNode* root, int val) {
if (root == nullptr || root->val == val) {
return root;
}
if (val < root->val) {
return search(root->left, val);
} else {
return search(root->right, val);
}
}
```
最后,我们可以将输入的键值序列作为参数,依次插入到二叉排序树中,并查找其中的某些节点。完整的代码如下:
```c++
#include <iostream>
using namespace std;
struct BSTNode {
int val;
BSTNode* left;
BSTNode* right;
BSTNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void insert(BSTNode*& root, int val) {
if (root == nullptr) {
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 == nullptr || root->val == val) {
return root;
}
if (val < root->val) {
return search(root->left, val);
} else {
return search(root->right, val);
}
}
int main() {
int n, m;
cin >> n >> m;
BSTNode* root = nullptr;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
insert(root, x);
}
for (int i = 0; i < m; i++) {
int x;
cin >> x;
BSTNode* node = search(root, x);
if (node != nullptr) {
cout << "Found" << endl;
} else {
cout << "Not Found" << endl;
}
}
return 0;
}
```
希望这个代码能够帮助您解决问题!
阅读全文