动态二进制树形搜索算法代码实现
时间: 2023-08-26 16:21:05 浏览: 121
动态二进制树形搜索算法(Dynamic Binary Tree Search Algorithm)是一种常见的搜索算法,它可以在一个无序的数据集合中进行高效的搜索。这种算法的核心思想是将数据集合构建成一棵二叉搜索树,并且在搜索过程中,根据搜索值与当前节点的大小关系,决定往左子树还是右子树搜索。下面是一个简单的C++实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class BinarySearchTree {
private:
TreeNode *root;
public:
BinarySearchTree() : root(NULL) {}
void insert(int val) {
if (root == NULL) {
root = new TreeNode(val);
return;
}
TreeNode *cur = root;
while (true) {
if (val < cur->val) {
if (cur->left == NULL) {
cur->left = new TreeNode(val);
break;
}
cur = cur->left;
} else {
if (cur->right == NULL) {
cur->right = new TreeNode(val);
break;
}
cur = cur->right;
}
}
}
bool search(int val) {
TreeNode *cur = root;
while (cur != NULL) {
if (cur->val == val) {
return true;
} else if (val < cur->val) {
cur = cur->left;
} else {
cur = cur->right;
}
}
return false;
}
};
int main() {
BinarySearchTree bst;
vector<int> nums = {5, 3, 7, 2, 4, 6, 8};
for (int i = 0; i < nums.size(); i++) {
bst.insert(nums[i]);
}
cout << bst.search(4) << endl; // output: 1
cout << bst.search(9) << endl; // output: 0
return 0;
}
```
在这个实现中,我们定义了一个`TreeNode`结构体,表示二叉搜索树的节点。然后定义了一个`BinarySearchTree`类,其中包含`root`指针,表示树的根节点。`insert`函数用于插入一个值到树中,`search`函数用于搜索一个值在树中是否存在。在`insert`函数中,我们使用了一个while循环来不断比较插入值与节点值的大小关系,从而决定往左子树还是右子树插入。在`search`函数中,我们同样使用了一个while循环来进行搜索,直到找到目标节点或者节点为NULL为止。
阅读全文