数据结构和算法学习记录——平衡二叉树(基本介绍、平衡因子、平衡二叉树的定义、平衡二叉树的高度)
目录
基本介绍
平衡因子
平衡二叉树
平衡二叉树的高度
基本介绍
什么是平衡二叉树?
以一个例子来解释一下:
搜索树结点按不同的插入次序,将会导致不同的深度和平均查找长度ASL


在二叉搜索树中查找一个元素:
(a)要找到Jan,需要查找一次;要找到Feb,需要查找两次;
要找到Mar,也需要查找两次......要找到Nov,需要查找六次。
把所有查找次数加起来,再除以12,
得到平均查找长度:ASL(a) = ( 1 + 2 * 2 + 3 * 3 + 4 * 3 + 5 * 2 + 6 * 1 ) / 12 = 3.5
(b)要找到July,需要查找一次;要找到Feb,需要查找两次;
要找到May,也需要查找两次......要找到Sept,需要查找四次。
算出平均查找长度:ASL(b) = (1 + 2 * 2 + 3 * 4 + 4 * 5) / 12 = 3.0
(c)要找到Apr,需要查找一次;要找到Aug,需要查找两次......
要找到Sept,需要查找十二次。
算出平均查找长度:ASL(c) = ( 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12) / 12 = 6.5
通过上面的例子,我们可以看到方式b的平均查找长度最短,在观感上结点的分布也比较均匀。
所以二叉树,我们要求比较平衡,才能够让查找的长度更短一些。
而如何衡量一颗二叉树平衡不平衡呢?
- 是左右两边的结点数差不多
- 是左右两边的高度差不多
这样我们就认为基本上平衡,即为平衡二叉树。
平衡因子
平衡因子(Balance Factor,简称BF):
BF(T) =
-
, 其中
和
分别为T的左、右子树的高度。
平衡二叉树
平衡二叉树(Balanced Binary Tree) (AVL树)
空树,或者任一结点左、右子树高度差的绝对值不超过1,即
下面来判断一下以下几颗二叉树是否为平衡二叉树:
(1)

(2)
(3)

先来看第一棵二叉搜索树:

再来看第二棵二叉搜索树:
最后看第三棵二叉搜索树:
平衡二叉树的高度
我们要二叉树平衡,其目的是为了让二叉树的高度更低一些,
越平衡的二叉树高度就越低。
一棵结点总数为n的完全二叉树高度为 h = log2n,

那么平衡二叉树的高度是否能达到呢?
设为 高度为h的平衡二叉树的最少结点数。 结点数最少时:

总结出:

可以得到一个公式:
我们会发现,这个公式有点眼熟,是与斐波那契序列的公式有点像。

从这里我们就来分析一下nh跟斐波那契序列的有什么关系。
在数学上,有一个公式:
当i逐步增大时,大致等于公式算出来的值。
且是一个指数函数。
根据我们上面分析出来的和
的关系,就可以代入得到
的相关公式。
所以反过来我们就得到h的表达式:
用自己的想法把他推一遍:

综上所述,我们可以得到结论:
给定结点数为n的AVL树的最大高度为
end
学习自:MOOC数据结构——陈越、何钦铭
相关文章:
数据结构和算法学习记录——平衡二叉树(基本介绍、平衡因子、平衡二叉树的定义、平衡二叉树的高度)
目录 基本介绍 平衡因子 平衡二叉树 平衡二叉树的高度 基本介绍 什么是平衡二叉树? 以一个例子来解释一下: 搜索树结点按不同的插入次序,将会导致不同的深度和平均查找长度ASL 在二叉搜索树中查找一个元素: (…...
【浓缩概率】浓缩概率思想帮我蒙选择题的概率大大提升!
今天在学习的时候遇到一个很有趣的思想叫作浓缩概率,可以帮我们快速解决一下概率悖论问题! 什么是概率 计算概率有下面两个最简单的原则: 原则一、计算概率一定要有一个参照系,称作「样本空间」,即随机事件可能出现…...
两小时让你全方位的认识文件(一)
想必友友们在生活中经常会使用到各种各样的文件,那么我们是否了解它其中的奥秘呢,今天阿博就带领友友们深入地走入文件🛩️🛩️🛩️ 文章目录 一.为什么使用文件二.什么是文件三.文件的打开和关闭四.文件的顺序读写 一…...
基于Java+Springboot+vue网上商品订单转手系统设计和实现
基于JavaSpringbootvue网上商品订单转手系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…...
旅游-商场购物
标题 前言必学场景词汇及用法售货员接待促销活动选购商品询问材质与质量试穿衣服杀价修改衣服结账售后服务退换货情境常用单词化妆品类别护肤品类别护肤品功能前言 加油 必学场景词汇及用法 售货员接待 1.be of service to sb 服务某人 Hello, ma’am. Could I be of serv…...
毕业论文用什么流程图软件比较好?
在写作论文的时候使用流程图,会让我们的论文看起来更加有逻辑。并且流程图的图片都可以在PPT中随意插入以及使用。 基础流程图作为最为基本和简单的的流程图方式,一般不区分用户角色和场景,适用于简单场景,梳理单一的流程情况&am…...
算法刷题|70.爬楼梯(进阶)、322.零钱兑换、279.完全平方数
爬楼梯(进阶) 题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 思路:本题也可以抽象成完全背包的问题,背包就是总共多少阶台阶&am…...
【MCS-51】51单片机结构原理
至今为止,MCS-51系列单片机有许多种型号的产品:其中又分为普通型51(8031、8051、89S51)和增强型52(8032、8052、89S52等)。它们最大的区别在于存储器配置各有差异。下面我举例子的都是8051这一系列的单片机…...
软件测试技术之如何编写测试用例(3)
14、对于类似于手机版淘宝这种软件,它拥有客户端,服务器端还有一个后台管理系统类似于进销存管理系统,我如何设计测试用例才能保证功能的完全覆盖?他们之间的交互如何设计测试用例? 专家分析:对于复合型的…...
移远通信笔试题
限时60分钟 1.下列关于栈叙述正确的是 A A) 栈顶元素最先能被删除 B)栈顶元素最后才能被删除 C)栈底元素永远不能被删除 D)以上三种都不对 在栈中,最后被压入的元素总是在栈顶上方,而栈顶元素总是最先被弹出的元…...
python算法中的机器学习算法之监督学习知识点(详解)
目录 学习目标: 学习内容: Ⅰ. 线性回归(Linear Regression) Ⅱ. 逻辑回归(Logistic Regression)...
Flink主要有两种基础类型的状态:keyed state
Flink主要有两种基础类型的状态:keyed state 和operator state。 Keyed State Keyed State总是和keys相关,并且只能用于KeyedStream上的函数和操作。 你可以将Keyed State视为是已经被分片或分区的Operator State,每个key都有且仅有一个状态分…...
js录音支持h5 pc ios android
最近在做h5录音的页面要求可暂停录音,继续录音,写好后发现不兼容ios,无奈只能找兼容方法,找了一天也没找到,后来看到一个网站在ios上可以暂停录音,后来引入他的js文件果然能用了 网站放下面了 Recorder H5: 用于html5网页中的前…...
mybatis04-mybatis缓存、分页插件、注解开发(一对一、多对一、多对多)
mybatis04 mybatis 缓存 一、mybatis 缓存概述 1、缓存 缓存 是存在于内存中的临时数据,使用缓存的目的是:减少和数据库的交互次数,提高执行效率。 2、mybatis 缓存 mybatis 与 大多数的持久层框架一样,提供了缓存策略…...
软件平台接口常见问题汇总
接口常见问题汇总 一、接口技术层面 1、输入参数验证校验不全面。如: 1.1入参数据类型长度边界,范围边界。 1.2 入参数据内容、成员内容,有效无效,合法非法。 1.3 入参数据 特殊字符 敏感字符过滤。 1.4 入参可否必选。 2、接口…...
SparkStreaming学习之——无状态与有状态转化、遍历kafka的topic消息、WindowOperations
目录 一、状态转化 二、kafka topic A→SparkStreaming→kafka topic B (一)rdd.foreach与rdd.foreachPartition (二)案例实操1 1.需求: 2.代码实现: 3.运行结果 (三)案例实操2 1.需求: 2.代码实现: 3.运行结果 三、W…...
上市公司碳排放测算数据(1992-2022年)
根据《温室气体核算体系》,企业的碳排放可以分为三个范围。 范围一是直接温室气体排放,产生于企业拥有或控制的排放源,例如企业拥有或控制的锅炉、熔炉、车辆等产生的燃烧排放;拥有或控制的工艺设备进行化工生产所产生的排放。 范…...
Springboot 整合 JPA 及 Swagger2
首先是官方文档: Spring Data JPA - Reference Documentationhttps://docs.spring.io/spring-data/jpa/docs/2.2.4.RELEASE/reference/html/#repositories.query-methods 1、JPA相关概念 2、创建 Springboot 项目 修改 pom 文件,可以直接进行复制粘贴&a…...
android aidl
本文只是记录个人学习aidl的实现,如需学习请参考下面两篇教程 官方文档介绍Android 接口定义语言 (AIDL) | Android 开发者 | Android Developers 本文参考文档Android进阶——AIDL详解_android aidl_Yawn__的博客-CSDN博客 AIDL定义:Android 接口…...
MYSQL---主从同步概述与配置
一、MYSQL主从同步概述 1、什么是MySQL主从同步? 实现数据自动同步的服务结构 主服务器(master): 接受客户端访问连接 从服务器(slave):自动同步主服务器数据 2、主从同步原理 Maste:启用binlog 日志 Slave:Slave_IO: 复制master主…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
