用c++编写一个算法来实现二叉搜索。
时间: 2024-03-10 10:48:00 浏览: 68
这是基本数据结构及其算法的C++实现,涉及单链表、双链表、栈 、二叉树、并查集、哈夫曼树、平衡二叉树、二叉搜索树等.zip
以下是使用 C++ 实现二叉搜索树的示例代码:
```c++
#include <iostream>
using namespace std;
// 二叉搜索树的节点结构体
struct TreeNode {
int key;
int value;
TreeNode* left;
TreeNode* right;
TreeNode(int k, int v) : key(k), value(v), left(nullptr), right(nullptr) {}
};
// 插入新节点
TreeNode* insert(TreeNode* root, int key, int value) {
// 如果根节点为空,则创建新节点
if (!root) {
return new TreeNode(key, value);
}
// 如果新键小于当前节点的键,则插入到左子树中
if (key < root->key) {
root->left = insert(root->left, key, value);
}
// 如果新键大于当前节点的键,则插入到右子树中
else if (key > root->key) {
root->right = insert(root->right, key, value);
}
// 如果新键等于当前节点的键,则更新节点值
else {
root->value = value;
}
return root;
}
// 查找节点
TreeNode* search(TreeNode* root, int key) {
// 如果根节点为空,则返回空指针
if (!root) {
return nullptr;
}
// 如果要查找的键小于当前节点的键,则在左子树中查找
if (key < root->key) {
return search(root->left, key);
}
// 如果要查找的键大于当前节点的键,则在右子树中查找
else if (key > root->key) {
return search(root->right, key);
}
// 如果要查找的键等于当前节点的键,则返回当前节点
else {
return root;
}
}
// 中序遍历二叉搜索树
void inorderTraversal(TreeNode* root) {
if (root) {
inorderTraversal(root->left);
cout << "(" << root->key << ", " << root->value << ")" << endl;
inorderTraversal(root->right);
}
}
int main() {
// 创建空树
TreeNode* root = nullptr;
// 插入新节点
root = insert(root, 3, 30);
root = insert(root, 1, 10);
root = insert(root, 2, 20);
root = insert(root, 4, 40);
root = insert(root, 5, 50);
// 中序遍历二叉搜索树
inorderTraversal(root);
// 查找节点
TreeNode* node = search(root, 4);
if (node) {
cout << "Node found: (" << node->key << ", " << node->value << ")" << endl;
} else {
cout << "Node not found." << endl;
}
return 0;
}
```
这个示例代码定义了一个二叉搜索树的节点结构体 `TreeNode`,包含键值对、左子节点和右子节点。使用 `insert` 函数插入新节点,使用 `search` 函数查找节点。在 `main` 函数中,我们创建一个空树,插入几个节点,然后中序遍历二叉搜索树,并查找一个节点。
阅读全文