当前位置: 首页 > news >正文

C++ 渗透 数据结构中的二叉搜索树

欢迎来到干货小仓库

"沙漠尽头必是绿洲。"

                                --面对技术难题时,坚持终会看到希望。

1.二叉搜索树的概念

二叉搜索树又称二叉排序树,它或者是一颗空树,或者是具有以下性质的二叉树:

a、若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。

b、若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。

c、它的左右子树也分别为二叉搜索树

2.二叉搜索树的查找

①从根开始比较,若查找的目标值比根大则往右子树中查找,比根小则往左边找。

②最多查找高度次,走到空还没找到,则这个值不存在。

循坏实现和递归实现

3.二叉搜索树的插入

a、若树为空,则直接新增节点,赋值给根(root)。

b、树不为空,则按二叉搜索树的规则走,比根节点大的 往右子树找,反之往左子树找,找到插入位置后,与该位置的父节点比较,看链接在左子树还是右子树。

c、当插入的数据,树中已有则插入失败。

4.二叉搜索树的删除

首先遍历二叉搜索树,看是否存在删除的值,不存在则直接返回false。

存在:主要分为两种情况

①该节点其左子树/右子树其中一个不为空或者都为空

②该节点其左子树和右子树都不为空。

第一种情况

第二种情况:要删除的节点的左右子树都不为空

方式一:与左子树的最右节点交换(左子树最大值)

方式二:与右子树的最左节点交换(右子树最小值)

非递归版本

//非递归
bool Erase(const K& key)
{Node* cur = _root;Node* parent = nullptr;while (cur){if (cur->_key > key){parent = cur;cur = cur->_left;}else if (cur->_key < key){parent = cur;cur = cur->_right;}//找到删除元素了else{	//左子树为空if (cur->_left == nullptr){	//要删除的数据是根节点if (cur == _root)_root = _root->_right;else{if (parent->_right == cur)parent->_right = cur->_right;elseparent->_left = cur->_right;}}//右子树为空else if (cur->_right == nullptr){	//要删除的数据是根节点if (cur == _root){_root = _root->_left;}else{if (parent->_right == cur)parent->_right = cur->_left;elseparent->_left = cur->_left;}}//左右都不为空else{//找左子树的最大值(其右子树必为空)parent = cur;Node* leftMax = cur->_left;while (leftMax->_right != nullptr){parent = leftMax;leftMax = leftMax->_right;}swap(cur->_key, leftMax->_key);if (parent->_left == leftMax)parent->_left = leftMax->_left;elseparent->_right = leftMax->_left;cur = leftMax;}delete cur;return true;}}return false;
}

递归版本


          觉得不错的可以点赞+收藏+关注奥!!!谢谢大家的支持

相关文章:

  • Linux:进程间通信---命名管道共享内存
  • Python 脚本打包成可执行的 .exe 文件
  • 【quantity】0 README.md文件
  • JavaScript 到命令和控制 (C2) 服务器恶意软件分析及防御
  • Godhood ID——迈向去中心化AI情商生态系统的第一步
  • 单调栈算法精解(Java实现):从原理到高频面试题
  • 探秘数据中台:五大核心平台的功能全景解析
  • 封装axios,实现取消请求
  • 个人码支付免签系统三网免挂支付宝微信QQ钱包即时到账收款二维码聚合支付源码
  • 可视化图解算法33:判断是不是平衡二叉树
  • 告别异步复杂性?JDK 21 虚拟线程让高并发编程重回简单
  • I2C总线驱动开发:MPU6050应用
  • 《Python星球日记》 第36天:线性代数基础
  • 网站防护如何无惧 DDoS 攻击?
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据类型转换操作
  • 邂逅蓝耘元生代:ComfyUI 工作流与服务器虚拟化的诗意交织
  • 【coze】手册小助手(提示词、知识库、交互、发布)
  • 黑马点评day04(分布式锁-setnx)
  • AI数据分析中的伪需求场景:现状、挑战与突破路径
  • RAG_Techniques:探索GitHub热门RAG技术开源项目
  • 金融监管总局:支持银行有序设立科技金融专门机构,推动研发机器人、低空飞行器等新兴领域的保险产品
  • 微软通讯软件Skype正式停止运营:斥资85亿美元购入,月活用户曾超3亿
  • 2025五一档电影票房破7亿
  • 五四青年节|青春韵脚
  • 讲座预告|政府在人工智能研究和应用领域的作用
  • 美伊谈判因“后勤原因”推迟,伊朗:视美国做法再定谈判日期