c++怎么实现一个二叉搜索树_c++二叉搜索树实现方法

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

c++怎么实现一个二叉搜索树_c++二叉搜索树实现方法

二叉搜索树(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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++怎么使用perf工具进行性能分析_c++ perf工具性能分析方法
上一篇 2025年12月19日 02:49:12
c++智能指针shared_ptr和unique_ptr怎么用_c++智能指针使用指南
下一篇 2025年12月19日 02:49:21

相关推荐

发表回复

登录后才能评论
关注微信