新闻中心

C++如何实现一个二叉搜索树?(数据结构代码)

2025-12-12
浏览次数:
返回列表
C++实现BST需定义节点结构,支持插入、查找、删除:插入递归比较值并挂载;查找用迭代法O(1)空间;删除分三类——无子节点直接删、单子节点替代、双子节点用右子树最小值替换并递归删该值。

c++如何实现一个二叉搜索树?(数据结构代码)

用C++实现二叉搜索树(BST),核心是定义节点结构、支持插入、查找、删除三种基本操作,并保证左子树所有节点值

节点定义与基础结构

每个节点包含数据、左指针、右指针。推荐用指针管理内存,配合构造函数简化初始化:

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

插入操作(递归实现)

从根开始比较:比当前节点小则递归插入左子树,大则插入右子树;遇到空位置就新建节点。

Songtell Songtell

Songtell是第一个人工智能生成的歌曲含义库

Songtell 164 查看详情 Songtell
TreeNode* insertIntoBST(TreeNode* root, int val) {
    if (!root) return new TreeNode(val);
    if (val < root->val)
        root->left = insertIntoBST(root->left, val);
    else
        root->right = insertIntoBST(root->right, val);
    return root;
}

查找操作(迭代更简洁)

利用BST性质逐层向下,无需递归,空间复杂度O(1):

TreeNode* searchBST(TreeNode* root, int val) {
    while (root && root->val != val) {
        root = (val < root->val) ? root->left : root->right;
    }
    return root;
}

删除操作(分三类处理

找到目标节点后:

  • 无子节点:直接删,返回nullptr
  • 仅一个子节点:用子节点替代当前节点
  • 两个子节点:找右子树最小值(或左子树最大值)替换,再递归删除该最小值节点
TreeNode* deleteNode(TreeNode* root, int key) {
    if (!root) return nullptr;
    if (key < root->val)
        root->left = deleteNode(root->left, key);
    else if (key > root->val)
        root->right = deleteNode(root->right, key);
    else {
        if (!root->left) return root->right;
        if (!root->right) return root->left;
        TreeNode* minRight = root->right;
        while (minRight->left) minRight = minRight->left;
        root->val = minRight->val;
        root->right = deleteNode(root->right, minRight->val);
    }
    return root;
}

基本上就这些。注意所有操作都依赖BST的有序性,插入/删除后结构仍保持BST性质。实际使用时建议封装成class,加size、中序遍历等辅助接口会更实用。

以上就是C++如何实现一个二叉搜索树?(数据结构代码)的详细内容,更多请关注其它相关文章!


# 遍历  # 温州网站怎样推广产品  # 天津网站seo策划公司  # 广州SEO公司周年  # 网站优化推广计划书模板  # 三水网站推广方法  # 顺义区省电营销培训推广  # 石家庄营销推广费用标准  # 青岗广告推广招聘网站  # 安顺外贸网站推广公司  # 长葛网站优化推广方案  # node  # 第一个  # 与其他  # 三类  # 如何使用  # 最小值  # 如何实现  # 数据结构  # 子树  # 递归  # c++ 


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


相关推荐: Go语言中高效处理x-www-form-urlencoded表单数据  汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口  在FastAPI中利用lifespan与依赖注入高效管理Redis连接池  小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍  顺丰快递查单号物流信息 顺丰快递小程序查询入口  动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道  sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  2026年CSGO开箱网站推荐 CSGO开箱平台精选  J*a中实现Go语言select通道多路复用机制  Golang如何测试channel通信行为_Golang channel通信测试与分析方法  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  菜鸟取件码是什么怎么查 最全查询渠道汇总  基于动态规划的房屋花卉种植最小成本算法详解  怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除  Django模型中自动计算可用余额的实现方法  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题  Python大型XML文件高效流式解析教程  JUnit5/Mockito:优雅测试内部依赖与异常处理的实践  Golang如何安装Swagger工具_GoSwagger文档生成环境  CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略  使用Python高效删除Word宏并转换DOCM为DOCX格式  如何修改开机登录密码_Windows账户安全设置超详细教程【必学】  如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构  C++如何生成随机数_C++ random库使用方法与范围设置  如何更改在 Excel 中打开超链接时的默认浏览器  微信网页版登录教程_微信网页版登录入口在哪  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  AO3镜像入口大全 AO3网页版内容访问全集  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  网站内容防复制粘贴的实现策略与局限性  狙击外星人小游戏开始_狙击外星人小游戏立即开始  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  Pyrogram与g4f集成:异步编程实践与常见错误解决  J*a TimerTask中HashMap意外清空的深层原因与解决方案  抖音网页版怎么|直播|_抖音网页版开播操作指南  蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台  深入理解J*aScript中的B样条曲线与节点向量生成  解决J*aScript中重复选择项的确认对话框显示问题  PHP URL参数传递与500错误调试指南  Tabulator表格日期时间排序问题及自定义解决方案  Python类型检查:优化关联可选属性的Mypy推断策略  Golang如何使用const iota_Go iota常量计数器讲解  火锅吃太多会怎样 火锅吃太多会上火吗 

搜索