给一c++代码实现二叉树折半查找
时间: 2023-11-20 15:05:35 浏览: 89
用C++实现二叉树的查找功能
4星 · 用户满意度95%
以下是一个简单的 C++ 代码实现二叉树折半查找的示例:
```c++
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class BST {
public:
TreeNode* root;
BST() {
root = NULL;
}
void insert(int val) {
if (root == NULL) {
root = new TreeNode(val);
return;
}
TreeNode* cur = root;
while (cur != NULL) {
if (val < cur->val) {
if (cur->left == NULL) {
cur->left = new TreeNode(val);
return;
}
cur = cur->left;
} else if (val > cur->val) {
if (cur->right == NULL) {
cur->right = new TreeNode(val);
return;
}
cur = cur->right;
} else {
return; // do nothing, val already exists in BST
}
}
}
TreeNode* search(int val) {
TreeNode* cur = root;
while (cur != NULL) {
if (val < cur->val) {
cur = cur->left;
} else if (val > cur->val) {
cur = cur->right;
} else {
return cur; // val found
}
}
return NULL; // val not found
}
};
int main() {
BST bst;
bst.insert(5);
bst.insert(3);
bst.insert(7);
bst.insert(1);
bst.insert(9);
TreeNode* found = bst.search(7);
if (found != NULL) {
cout << "Found node with value " << found->val << endl;
} else {
cout << "Node not found" << endl;
}
return 0;
}
```
在上述代码中,`struct TreeNode` 表示二叉树的节点,包含一个整数值和左右子节点指针。`class BST` 表示二叉搜索树,包含一个根节点指针和插入和查找方法。在 `insert` 方法中,我们通过比较节点值来确定要将新节点插入到左子树还是右子树中。在 `search` 方法中,我们从根节点开始遍历二叉树,比较节点值并分别移动到左子树或右子树,直到找到目标值或遍历完整个树。
阅读全文