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

二叉搜索树(Binary Search Tree, BST)是一种重要的数据结构,它能高效地实现查找、插入和删除操作。在C++中,可以通过类和指针来构建一个完整的BST。下面是一个简洁、实用的C++ BST实现方法。
定义BST节点结构
每个节点包含一个值、指向左子树和右子树的指针。
struct TreeNode { int val; TreeNode* left; TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
BST类的基本设计
我们创建一个BST类,封装插入、查找、删除等核心操作。
立即学习“C++免费学习笔记(深入)”;
class BST {private: TreeNode* root;TreeNode* insertNode(TreeNode* node, int val) { if (!node) { return new TreeNode(val); } if (val 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 val) { return searchNode(node->left, val); } else { return searchNode(node->right, val); }}TreeNode* deleteNode(TreeNode* node, int val) { if (!node) return nullptr; if (val 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 using namespace std;int main() {BST tree;tree.insert(5);tree.insert(3);tree.insert(7);tree.insert(2);tree.insert(4);
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数据结构实现方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1484662.html
微信扫一扫
支付宝扫一扫