新闻中心

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

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

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) {}

};

Whimsical Whimsical

Whimsical推出的AI思维导图工具

Whimsical 182 查看详情 Whimsical

BST类的基本设计

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

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数据结构实现方法的详细内容,更多请关注其它相关文章!


# 是一种  # 电商平台推广营销模式  # 优化关键词的排名方法是  # 长春营销推广哪家强  # 山东网站推广行业  # 崇州集团网站建设  # 网站制作网站建设单位  # 搜狗seo最新算法  # 铜山区seo多少钱  # 舟山产品seo推广  # 网站建设推荐超速云建站  # 相关文章  # 遍历  # node  # 与其他  # 如何使用  # 如何实现  # 是一个  # 子树  # 数据结构  # 递归  # stream  # ios  # c++  # ai 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  大象笔记网页版入口 印象笔记网页版登录入口  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  深入理解Promise链:如何在catch后中断then的执行  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题  如何在Promise链中有效终止错误处理后的执行  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能  免费抖音短视频入口_抖音网页版短视频免费通道  AO3最新镜像入口 Archive of Our Own官方平台访问  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  Pyrogram与g4f集成:异步编程实践与常见错误解决  Angular中父组件异步更新子组件复选框状态的实践指南  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  海棠账号登录入口_登录海棠账户同步阅读记录  使用Python高效删除Word宏并转换DOCM为DOCX格式  J*aScript数据结构转换:将对象数组按类别分组  精准捕获:如何在页面中监听除特定元素外的所有点击事件  内存疯狂猛猛涨价:主板销量直接腰斩!  Tailwind CSS line-clamp 布局问题解析与修复指南  Mac怎么查看崩溃日志_Mac控制台错误报告分析  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  CSS实现侧边栏导航项全宽圆角悬停背景效果  Golang并发任务中错误如何聚合_Golang goroutine error收集方式  Log4j Console Appender性能瓶颈与高并发优化策略  Linux如何构建多环境配置管理_Linux多环境配置方案  Go语言中Map存储的结构体如何调用指针方法:深入解析与实践  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  b站怎么删除评论_b站评论管理与删除操作  AO3官方可用镜像 Archive of Our Own网页版最新入口  电脑IP地址怎么查 查看本机IP地址的几种方法  狙击外星人小游戏开始_狙击外星人小游戏立即开始  EMS快递官网app_中国邮政速递物流手机客户端  J*a TimerTask中HashMap意外清空的深层原因与解决方案  探索高级语言到C/C++的转译路径:以Go为例及内存管理策略  基于动态规划的房屋花卉种植最小成本算法详解  Golang如何使用net/url解析URL_Golang URL解析与处理方法  J*a实现学校排课程序_面向对象结构化项目示例  Win11怎么关闭快速启动_Win11彻底关机设置教程  机器学习中对数变换预测结果的反向还原  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  Python异步编程实践:使用Binance API构建实时交易数据流 

搜索