首页 > 后端开发 > C++ > 正文

c++如何实现一个二叉搜索树_c++ BST数据结构实现方法

下次还敢
发布: 2025-11-18 13:33:11
原创
589人浏览过
二叉搜索树通过类封装实现插入、查找、删除操作,节点结构含值与左右指针,插入按大小规则递归构建,查找依二分逻辑遍历,删除时无子节点直接删、单子节点替换、双子节点找中序后继替代并递归删,示例验证功能正确性。

c++如何实现一个二叉搜索树_c++ bst数据结构实现方法

二叉搜索树(Binary Search Tree, BST)是一种重要的数据结构,它能高效地实现查找、插入和删除操作。在C++中,可以通过类和指针来构建一个完整的BST。下面是一个简洁、实用的C++ BST实现方法。

定义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类的基本设计

我们创建一个BST类,封装插入、查找、删除等核心操作。

立即学习C++免费学习笔记(深入)”;

纳米搜索
纳米搜索

纳米搜索:360推出的新一代AI搜索引擎

纳米搜索 30
查看详情 纳米搜索
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++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号