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

C++笔记14•二叉树之二叉搜索树•

二叉搜索树

1.二叉搜索树

概念:

二叉搜索树又称二叉排序树也叫二叉查找树,它可以是一棵空树。
二叉树具有以下性质:
若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
它的左右子树也分别为二叉搜索树;

2.二叉搜索树功能

1. 二叉搜索树的查找
a 、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。
b 、最多查找高度次,走到到空,还没找到,这个值不存在。
2. 二叉搜索树的插入
插入的具体过程如下:
a. 树为空,则直接新增节点,赋值给 root 指针
b. 树不空,按二叉搜索树性质查找插入位置,插入新节点
3.二叉搜索树的删除
首先查找元素是否在二叉搜索树中,如果不存在,则返回 , 否则要删除的结点可能分下面四种情 况:
a. 要删除的结点无孩子结点
b. 要删除的结点只有左孩子结点
c. 要删除的结点只有右孩子结点
d. 要删除的结点有左、右孩子结点
看起来有待删除节点有 4 中情况,实际情况 a 可以与情况 b 或者 c 合并起来,因此真正的删除过程如下:
情况 b :删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点 -- 直接删除
情况 c :删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点 -- 直接删除
情况 d:在它的右子树中寻找中序下的第一个结点( 也就是删除节点的左子树中最大的值或者删除节点的右子树中最小的值 ),用它的值填补到被删除节点 中,再来处理该结点的删除问题 -- 替换法删除
删除9、16、3、10节点
其中:节点9和16可以直接删除。3、10节点需要用替换法删除
节点3:需要用2节点或7节点来替换
节点10:需要用9节点或12节点来替换

3.二叉搜索树的性能 

最优情况下,二叉搜索树为完全二叉树 ( 或者接近完全二叉树 ) ,其平均比较次数为: log2(N)
最差情况下,二叉搜索树退化为单支树 ( 或者类似单支 ) ,其平均比较次数为: O(N)
解决方法:用三叉链的AVL树

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • while (r > b[i].r) del(a[r--]); while (r < b[i].r)
  • C/C++逆向:寻找mian函数(其他编译配置特征)
  • 信息安全数学基础(1)整除的概念
  • 值得收藏!为初学者设置Windows笔记本电脑的8个简单提示
  • CSS学习2
  • Python+VScode 两个不同文件夹里的py文件相互调用|python的模块调用|绝对导入
  • VUE2—defineProperty和VUE3—proxy 详解
  • 仿华为车机功能之--修改Launcher3,实现横向滑动桌面空白处切换壁纸
  • Go 语言版本管理——Goenv
  • 三、建造者模式
  • Kaggle克隆github项目+文件操作+Kaggle常见操作问题解决方案——一文搞定,以openpose姿态估计项目为例
  • Kafka【二】关于消费者组(Consumer Group)、分区(partition)和副本(replica)的理解
  • Disjoint-set data structure--并查集
  • 过滤器 与 拦截器
  • window下kafka3启动多个
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 2017届校招提前批面试回顾
  • canvas 高仿 Apple Watch 表盘
  • github指令
  • hadoop集群管理系统搭建规划说明
  • Lucene解析 - 基本概念
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Python3爬取英雄联盟英雄皮肤大图
  • VUE es6技巧写法(持续更新中~~~)
  • 编写高质量JavaScript代码之并发
  • 大数据与云计算学习:数据分析(二)
  • 好的网址,关于.net 4.0 ,vs 2010
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 携程小程序初体验
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • Spring Batch JSON 支持
  • # Apache SeaTunnel 究竟是什么?
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #QT项目实战(天气预报)
  • (编译到47%失败)to be deleted
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (四)模仿学习-完成后台管理页面查询
  • .Net 6.0--通用帮助类--FileHelper
  • .Net CF下精确的计时器
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • @Autowired自动装配
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [20161214]如何确定dbid.txt
  • [Bug]使用gradio创建应用提示AttributeError: module ‘gradio‘ has no attribute ‘inputs‘
  • [CSS]盒子模型
  • [Flutter]打包IPA
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析
  • [html] 动态炫彩渐变背景
  • [JavaEE]线程的状态与安全
  • [Leetcode 105][Medium] 从前序与中序遍历序列构造二叉树-递归
  • [LeetCode] 596:超过5名学生的课