进阶二叉树

目录

二叉树

二叉搜索树

二叉搜索树的定义

二叉搜索树的操作 

哈夫曼树

哈夫曼树的定义

哈夫曼树的构造

哈夫曼树的性质

 平衡二叉树

平衡二叉树的定义:

平衡二叉树的插入调整

1.LL插入/LL旋转

2.RR插入/RR旋转

3.LR插入/LR旋转

4.RL插入/RL旋转


二叉树

二叉搜索树

二叉搜索树的定义

二叉搜索树也称二叉排序树或二叉查找树,树上任何一个结点的值,比起其左子树的值都要大,比其右子树的值都要小,并且其左右子树都是二叉搜索树

二叉搜索树的操作 

1.插入:同上一篇二叉树的插入一样,插入值为x的结点

2.删除:分为三种情况:

(1)删除的结点没有子结点,就将删除的结点的父节点指向NULL

(2)删除的结点有一个子结点,就将删除的结点的父节点指向删除结点的子节点

(3)删除的节点有两个子节点,就将左子树最大的结点或右子树最小的结点替换删除的·结点

3.查找:

在树中查找值为x的结点,并返回其所在位置的地址

二叉搜索树:

最大元素一定在最右分支的端结点上

最小元素一定在最左分支的端结点上

哈夫曼树

哈夫曼树的定义

给定n个权值作为n个叶子结点,构造一颗二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值w_{k},从根结点到每个叶子结点的长度为l_{k}则每个叶子结点的带权路径长度之和就是:WPL=\sum_{k=1}^{n}w_{k}\cdot l_{k}

 

l_{k}:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。

 

哈夫曼树的构造

每次把权值最小的两棵二叉树合并,合并得到一个新的结点,其权值是合并的两个结点的权值之和。

哈夫曼树的性质

1.没有度为1的结点

2.哈夫曼树的任意非叶结点互换后,任然是哈夫曼树

3.同一权值可能存在不同构造的哈夫曼树

 平衡二叉树

平衡二叉树的定义:

平衡二叉树又被称做AVL树

任何一棵不空的平衡二叉树,其任意一结点的左右子树的高度差不能超过1,左右子树的高度差也被称做平衡因子(BF),BF(T)=hL-hR,hL和hR分别代表T树的左右子树高度,|BF(T)|<=1

不同的结点插入顺序,会导致生成不一样的树。则树的深度和平均查找长度ASL也会不同。

ASL = (同一层结点数量 * 结点的层次) / 结点总数

构成平衡二叉树所需的最少结点数:n_{h}=n_{h-1}+n_{h-2}+1n_{h}表示高度为h的平衡二叉树的最少结点数,等于前两层最少节点数之和再加1。其中n1=1,n2=2(n>=1)。

平衡二叉树的插入调整

插入的结点被称为“麻烦结点/破坏结点”。

一个结点其子树被插入新结点,该节点被陈称为“发现者/被破坏者”。

1.LL插入/LL旋转

插入的“破坏节点”,在“被破坏节点”的左子树的左子树上,因而叫LL插入。需要LL旋转(左单旋)。

 LL旋转:被破坏结点为A,被破坏结点的右子树记为,被破坏结点的左子树的根节点为B,B的左、右子树记为、。将B结点提升为新的根节点,A作为B结点的右儿子,还作为A结点的右子树;还作为B结点的左子树;变为A结点的左子树。

2.RR插入/RR旋转

插入的“破坏节点”,在“被破坏节点”的右子树的右子树上,因而叫RR插入。需要RR旋转(右单旋)。

RR旋转:被破坏结点为A,被破坏结点的左子树记为,被破坏结点的右子树的根节点为B,B的左、右子树记为、。将B结点提升为新的根节点,A作为B结点的左儿子,还作为A结点的左子树;还作为B结点的右子树;变为A结点的右子树。

3.LR插入/LR旋转

插入的“破坏节点”,在“被破坏节点”的左子树的右子树上,因而叫LR插入。需要LR旋转。

LR旋转:被破坏节点为A,A的左子树的根节点为B,A的右子树为;B的左子树为,B的右子树的根节点为C;C的左、右子树记为、。将C结点提升为新的根节点,B作为C结点的左儿子,A作为C的右儿子;还作为B的左子树,作为B的右子树;作为A的左子树,还作为A的右子树。

4.RL插入/RL旋转

插入的“破坏节点”,在“被破坏节点”的右子树的左子树上,因而叫RL插入。需要RL旋转。

RL旋转: 被破坏节点为A,A的左子树为,A的右子树为的根节点为B;B的左子树的根节点为C,B的右子树为;C的左、右子树记为、。将C结点提升为新的根节点,A作为C结点的左儿子,B作为C的右儿子;还作为A的左子树,作为A的右子树;作为B的左子树,还作为B的右子树。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/475555.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

餐饮小程序的功能与点餐收费解析

随着移动互联网的发展&#xff0c;越来越多的餐饮企业开始开发自己的餐饮小程序&#xff0c;以便更好地满足顾客的需求。那么&#xff0c;餐饮小程序到底需要哪些功能呢&#xff1f;开通点餐又是否需要收费呢&#xff1f;本文将从这两个方面为您进行详细的解答。 一、餐饮小程序…

【抽奖第5天】大厂游戏云服务器0门槛抽奖送!云服务器选购推荐 京东云 阿里云 腾讯云对比 幻兽帕鲁 雾锁王国 省钱学生党

好消息&#xff1a;抽奖活动开启&#xff01;时间&#xff1a;3月17日——3月24日 最高奖品&#xff1a;16G 6个月&#xff1b;32G 3个月 抽奖规则&#xff1a;B站点赞评论关注即可参与抽奖&#xff0c;3.24日公布获奖名单。 抽奖地址&#xff1a; 【首次抽奖】16G、32G免费…

mysql数据库如何安装

1.第一步需要下载mysql,直接官方下载。如果想要现成的可以私聊我。 2.解压mysql-5.7.44-winx64.zip文件 3.新建my.ini 注意&#xff1a;basedir、datadir改成你自己的按照路径 需要新建data文件夹设置 mysql 数据库的数据的存放目录 [mysql] # 设置 mysql 客户端默认字符…

【进程概念】进程控制块task_struct-PCB

文章目录 进程的概念如何描述进程?**为什么要描述一个进程**&#xff1f;进程描述--PCBtask_struct 组织进程查看进程通过系统调用获取进程标示符getpid()以及getppid() 进程的概念 在【百度百科】中&#xff0c;关于进程---- 狭义定义&#xff1a;进程是 正在运行 的程序的实…

Vue中的状态管理Vuex,基本使用

1.什么是Vuex? Vuex是专门为Vue.js设计的状态管理模式;特点:集中式存储和管理应用程序中所有组件状态,保证状态以一种可预测的方式发生变化。 1.1.什么是状态管理模式? 先看一个单向数据流的简单示意图 state:驱动应用的数据源 view:以声明方式将state映射到视图 actions:…

JetPack之LiveData粘性原因分析及hook解决

目录 前言一、LiveData粘性原因分析1.1 发送消息流程1.2 监听消息流程1.3 根因分析 二、hook解决 前言 在 Android 中&#xff0c;LiveData 的默认行为是粘性的&#xff0c;即 LiveData 在设置数据后&#xff0c;即使观察者订阅时已经有数据存在&#xff0c;观察者仍会立即收到…

通过人工智能驱动的交互提升客户体验

用AI创造无限可能&#xff1a;打造极致客户体验的秘诀 在当今竞争激烈的市场中&#xff0c;客户体验至关重要。 企业正在迅速采用人工智能驱动的交互来彻底改变与客户的互动。 人工智能技术不仅简化了运营&#xff0c;还带来了以前无法达到的个性化和效率水平。 对于寻求满足客…

权限管理系统-0.5.0

六、审批管理模块 审批管理模块包括审批类型和审批模板&#xff0c;审批类型如&#xff1a;出勤、人事、财务等&#xff0c;审批模板如&#xff1a;加班、请假等具体业务。 6.1 引入依赖 在项目中引入activiti7的相关依赖&#xff1a; <!--引入activiti的springboot启动器…

【Java Web基础】一些网页设计基础(二)

文章目录 1. Bootstrap导航栏设计1.1 代码copy与删减效果1.2 居中属性与底色设置1.3 占不满问题分析1.4 字体颜色、字体大小、字体间距设置1.5 修改超链接hover颜色&#xff0c;网站首页字体颜色 1. Bootstrap导航栏设计 1.1 代码copy与删减效果 今天设计导航栏&#xff0c;直…

round函数使用后,小数点前的0不见了

ROUND函数用于将数字四舍五入到指定的小数位数。 其基本语法为ROUND(number, num_digits)&#xff0c;其中number是要进行四舍五入的数字&#xff0c;num_digits是保留的小数位数。如果num_digits大于0&#xff0c;则四舍五入到指定的小数位&#xff1b;如果num_digits等于0&a…

【算法】 LRU Cache

目录 一、什么是LRU Cache 二、LRU Cache的实现 三、 LRU算法的运用场景 一、什么是LRU Cache LRU是Least Recently Used的缩写&#xff0c;意思是最近最少使用&#xff0c;它是一种Cache替换算法。 什么是 Cache&#xff1f;狭义的Cache指的是位于CPU和主存间的快速RAM&am…

vue2源码学习01配置rollup打包环境

1.下载rollup相关依赖 npm i rollup rollup-plugin-babel babel/core babel/preset-env --save-dev 2.新建rollup.config.js配置打包选项 //rollup可以导出一个对象&#xff0c;作为打包的配置文件 import babel from rollup-plugin-babel export default {input: ./src/ind…

CI/CD脚本简介,YAML介绍,Editor解析

说明&#xff1a; 此篇文章纯概念&#xff0c;没有实际操作&#xff0c;实际操作请蹲下一篇&#xff01; CI/CD理解 这段代码是用于配置GitLab CI/CD&#xff08;Continuous Integration/Continuous Deployment&#xff09;的YAML语法。GitLab CI/CD是一种自动化软件&#xff0…

【MySQL】对数据库的操作以及数据库备份相关操作

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习计网、mysql和算法 ✈️专栏&#xff1a;MySQL学习 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下 自己的爱好 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯…

上榜|美创入选《2024年网络与信息安全行业全景图》32个细分领域

近日&#xff0c;深圳市网络与信息安全行业协会正式发布《2024年网络与信息安全行业全景图》&#xff08;以下简称“全景图”&#xff09;&#xff0c;定位展现我国网络与信息安全行业整体生态及细分领域代表性厂商。 美创科技凭借硬核实力&#xff0c;成功入选数据安全、安全服…

外卖项目:使用AOP切面,完成公共字段自动填充(断点调试详细讲解)

文章目录 一、问题描述二、实现思路三、实现步骤四、断点实操五、代码演示 一、问题描述 我们已经完成了后台系统的员工管理功能和菜品分类功能的开发&#xff0c;在新增员工或者新增菜品分类时需要设置创建时间、创建人、修改时间、修改人等字段&#xff0c;在编辑员工或者编…

西井科技与安通控股签署战略合作协议 共创大物流全新生态

2024年3月21日&#xff0c;西井科技与安通控股在“上海硅巷”新象限空间正式签署战略合作框架协议。双方基于此前在集装箱物流的成功实践与资源优势&#xff0c;积极拓展在AI数字化产品、新能源自动驾驶解决方案和多场景应用&#xff0c;以及绿色物流链等领域的深度探索、强强联…

Pudgy Penguins交易量一路攀升 多次创下历史新高

日前&#xff0c;一个名为胖企鹅&#xff08;Pudgy Penguins&#xff09; NFT 项目交易量持续攀升&#xff0c;一度在3月9日成为NFT市场的“销冠”。事实上&#xff0c;从2023年下半年开始&#xff0c;Pudgy Penguins的地板价就在不断上升&#xff0c;进入2024年更是多次创下历…

练习题+题解:链表+dp

目录 1.链表指定区间反转题目描述输入格式:输出格式:输入样例:输出样例:题目分析代码实现 2.hxj和他的甜品盲盒I输入格式:输入样例:输出样例:样例解释 输入样例:输出样例:样例解释 题目分析Java代码实现 3.First 50 Prime Numbers输入格式输出格式输入样例输出样例题目解析代码…