二叉搜索树通过节点的左小右大性质实现高效查找,C++中可定义TreeNode结构并封装BST类,实现插入、查找和删除操作:插入根据大小关系递归定位,查找沿路径比较目标值,删除分三种情况处理,包括用中序后继替换;示例代码展示创建、插入、搜索和删除流程,验证了核心功能正确性。

二叉搜索树(Binary Search Tree, BST)是一种重要的数据结构,它满足:对于任意节点,其左子树所有节点值小于该节点值,右子树所有节点值大于该节点值。C++中可以通过类和指针来实现一个基本的二叉搜索树。
定义树节点结构
每个节点包含数据、指向左子节点和右子节点的指针。
struct TreeNode { int val; TreeNode* left; TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
BST 类设计与核心操作
创建一个 BST 类,封装插入、查找、删除等操作。
立即学习“C++免费学习笔记(深入)”;
1. 插入节点(Insert)
从根开始比较,小于当前节点进入左子树,大于则进入右子树,直到找到空位置。
void insert(int val) { root = insertNode(root, val);}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;}
2. 查找节点(Search)
根据大小关系递归查找目标值。
bool search(int val) { return searchNode(root, val);}bool searchNode(TreeNode* node, int val) {if (!node) return false;if (val == node->val) return true;return val val ? searchNode(node->left, val) : searchNode(node->right, val);}
3. 删除节点(Remove)
分三种情况处理:
叶子节点:直接删除只有一个子节点:用子节点替代有两个子节点:用右子树的最小值(中序后继)替换并删除该后继
void remove(int val) { root = removeNode(root, val);}TreeNode removeNode(TreeNode node, int val) {if (!node) return nullptr;
if (val val) { node->left = removeNode(node->left, val);} else if (val > node->val) { node->right = removeNode(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* minRight = findMin(node->right); node->val = minRight->val; node->right = removeNode(node->right, minRight->val);}return node;
}
TreeNode findMin(TreeNode node) {while (node && node->left) {node = node->left;}return node;}
完整使用示例
将上述部分整合进一个类中,并测试基本功能。
#include using namespace std;class BST {private:struct TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}};
TreeNode* root;TreeNode* insertNode(TreeNode* node, int val) { ... }bool searchNode(TreeNode* node, int val) { ... }TreeNode* removeNode(TreeNode* node, int val) { ... }TreeNode* findMin(TreeNode* 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 = removeNode(root, val); }
};
// 测试代码int main() {BST tree;tree.insert(5);tree.insert(3);tree.insert(7);tree.insert(2);tree.insert(4);
cout << (tree.search(3) ? "Found 3n" : "Not found 3n");tree.remove(3);cout << (tree.search(3) ? "Found 3n" : "Not found 3n");return 0;
}
基本上就这些。这个实现涵盖了二叉搜索树的核心操作,适合学习和基础应用。注意实际项目中要考虑内存释放、平衡性等问题,更复杂场景建议使用 std::set 或 AVL 树、红黑树等自平衡结构。
以上就是c++++怎么实现一个二叉搜索树_c++二叉搜索树实现方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478319.html
微信扫一扫
支付宝扫一扫