如何用c++实现一个二叉搜索树 节点的插入、查找和删除【数据结构】


BST的插入、查找、删除操作均基于左小右大性质:插入递归至空位新增叶子;查找递归或迭代单路径比对;删除分三类——无子直接删、单子顶替、双子用中序前驱/后继替换并递归删。

如何用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) {}
};

插入操作:递归实现,保持BST性质

从根开始比较,小于当前节点往左走,大于往右走;遇到空位置就新建节点插入。

TreeNode* insertIntoBST(TreeNode* root, int val) {
  if (!root) return new TreeNode(val);
  if (val val) {
    root->left = insertIntoBST(root->left, val);
  } else {
    root->right = insertIntoBST(root->right, val);
  }
  return root;
}

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

  • 插入不改变原有结构,只新增叶子节点
  • 重复值可按需求处理(如忽略、或允许重复并插入右子树)
  • 非递归版本可用 while 循环 + 指针追踪父节点实现

查找操作:简单递归或迭代

利用BST有序性,每次比较后只进一个子树,时间复杂度平均 O(log n)。

图酷AI 图酷AI

下载即用!可以免费使用的AI图像处理工具,致力于为用户提供最先进的AI图像处理技术,让图像编辑变得简单高效。

图酷AI 106 查看详情 图酷AI

TreeNode* searchBST(TreeNode* root, int val) {
  if (!root || root->val == val) return root;
  if (val val) {
    return searchBST(root->left, val);
  } else {
    return searchBST(root->right, val);
  }
}

  • 返回匹配节点指针,未找到返回 nullptr
  • 迭代写法更省内存:用 while 遍历,更新 root = root->left 或 root->right

删除操作:分三种情况处理

删除是 BST 最复杂的操作,需保证删除后仍为 BST。关键在“替代节点”的选择:

  • 无子节点(叶子):直接删,返回 nullptr
  • 只有一个子节点:用该子节点顶替被删节点
  • 有两个子节点:找左子树最大值(或右子树最小值)替换,再递归删除该替代值

TreeNode* deleteNode(TreeNode* root, int key) {
  if (!root) return nullptr;
  if (key 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* predecessor = root->left;
    while (predecessor->right) predecessor = predecessor->right;
    root->val = predecessor->val;
    root->left = deleteNode(root->left, predecessor->val);
  }
  return root;
}

注意:用右子树最小值(中序后继)同样可行,逻辑对称。选哪个取决于风格偏好,不影响正确性。

以上就是如何用c++++实现一个二叉搜索树 节点的插入、查找和删除【数据结构】的详细内容,更多请关注其它相关文章!


# c++  # red  # 递归  # 子树  # 数据结构  # 图酷  # 如何用  # node  # 最小值  # 网络营销推广目标  # 十个最seo  # 百度关键词排名新技术  # 蒲公英营销推广方案  # 滨江百度网站优化价格  # 潍坊seo页面优化  # 企业网站优化排名连锁  # 与其他  # 图像处理  # 如何使用  # 迭代  # 龙岗seo信息优化推广  # 网站开发推广亅薇  # 泉州网站防火墙优化 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明  如何在CSS中使用伪类选择器_hover实现悬停效果  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  解决C#跨线程访问XML对象的异常 安全的并发XML处理模式  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作  家里的小飞虫总是不断,用什么方法可以彻底根除?  4399小游戏下装链接 4399小游戏下载链接入口  《淘宝联盟》推广自己的店铺方法  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  《幻兽帕鲁》手游帕鲁捕捉技巧分享  Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置  iPhone16Plus参数配置如何调整声音_iPhone16Plus参数配置声音调整详细方法  Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析  易车网官网直达入口 易车网在线登录入口  《合金装备4》有望推出重制版!制作人发话了  掌握产品代码正则表达式:避免常见陷阱与精确匹配  德邦快递收费标准详解  PHP实现等比数列:构建数组元素基于前一个值递增的方法  铁路12306怎么申请退票_铁路12306退票申请操作流程  XPath动态元素定位:如何精准选择文本内容变化的元素  139邮箱登录入口官网 139邮箱登录入口官网网址  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  J*aScript装饰器_元编程实战  Teambition网盘如何共享文件  realme 10 Pro息屏方案_realme 10 Pro省电策略  J*aScript桌面应用_Electron多进程架构实战  解决Pandas DataFrame高度碎片化警告:高效创建多列的策略  Excel宏怎么删除_Excel中删除宏的详细操作流程  c++如何使用std::thread::join和detach_c++线程生命周期管理  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧  泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  《气泡星球》兑换码礼包大全  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  《爱南宁》认证电动车方法  江苏大剧院会员卡购买步骤  《糖豆》添加舞曲方法  除了Copilot,还有哪些值得一试的VS Code AI插件?  《下一站江湖2》独孤剑诀习得方法  视频号视频怎么提取文案?提取的文案如何优化与使用?  研招网官方网站招生平台入口_中国研究生招生信息网官网登录  中通快递官网指定查询 中通快递单号查询平台入口  Golang如何操作指针参数_Go pointer参数传递规则  5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备  《咸鱼之王》新版孙坚技能解析  三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧  PHP多语言网站的实现:会话管理与翻译函数优化教程  J*aScript类型数组_TypedArray使用  顺丰官方查单号入口 顺丰快递单号查询官网入口 

 2025-12-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.