二叉搜索树通过类封装实现插入、查找、删除操作,节点结构含值与左右指针,插入按大小规则递归构建,查找依二分逻辑遍历,删除时无子节点直接删、单子节点替换、双子节点找中序后继替代并递归删,示例验证功能正确性。

二叉搜索树(Binary Search Tree, BST)是一种重要的数据结构,它能高效地实现查找、插入和删除操作。在C++中,可以通过类和指针来构建一个完整的BST。下面是一个简洁、实用的C++ BST实现方法。
每个节点包含一个值、指向左子树和右子树的指针。
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
<pre class='brush:php;toolbar:false;'>TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}};
我们创建一个BST类,封装插入、查找、删除等核心操作。
立即学习“C++免费学习笔记(深入)”;
class BST {
private:
TreeNode* root;
<pre class='brush:php;toolbar:false;'>TreeNode* insertNode(TreeNode* node, int val) {
if (!node) {
return new TreeNode(val);
}
if (val < node->val) {
node->left = insertNode(node->left, val);
} else if (val > node->val) {
node->right = insertNode(node->right, val);
}
// 重复值不插入
return node;
}
bool searchNode(TreeNode* node, int val) {
if (!node) return false;
if (node->val == val) return true;
if (val < node->val) {
return searchNode(node->left, val);
} else {
return searchNode(node->right, val);
}
}
TreeNode* deleteNode(TreeNode* node, int val) {
if (!node) return nullptr;
if (val < node->val) {
node->left = deleteNode(node->left, val);
} else if (val > node->val) {
node->right = deleteNode(node->right, val);
} else {
// 找到要删除的节点
if (!node->left) {
TreeNode* temp = node->right;
delete node;
return temp;
} else if (!node->right) {
TreeNode* temp = node->left;
delete node;
return temp;
}
// 有两个子节点:找右子树的最小值(中序后继)
TreeNode* successor = findMin(node->right);
node->val = successor->val;
node->right = deleteNode(node->right, successor->val);
}
return node;
}
TreeNode* findMin(TreeNode* node) {
while (node && node->left) {
node = node->left;
}
return node;
}public: BST() : root(nullptr) {}
void insert(int val) {
root = insertNode(root, val);
}
bool search(int val) {
return searchNode(root, val);
}
void remove(int val) {
root = deleteNode(root, val);
}};
下面是一个简单的测试用法:
#include <iostream>
using namespace std;
<p>int main() {
BST tree;
tree.insert(5);
tree.insert(3);
tree.insert(7);
tree.insert(2);
tree.insert(4);</p><pre class='brush:php;toolbar:false;'>cout << "Search 4: " << (tree.search(4) ? "Found" : "Not found") << endl;
cout << "Search 6: " << (tree.search(6) ? "Found" : "Not found") << endl;
tree.remove(3);
cout << "After deleting 3, search 3: "
<< (tree.search(3) ? "Found" : "Not found") << endl;
return 0;}
基本上就这些。这个实现覆盖了BST的核心功能:插入保持有序,查找利用二分逻辑,删除处理三种情况。注意递归写法清晰易懂,适合学习和实际使用。
以上就是c++++如何实现一个二叉搜索树_c++ BST数据结构实现方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号