进阶二叉树

目录

二叉树

二叉搜索树

二叉搜索树的定义

二叉搜索树的操作 

哈夫曼树

哈夫曼树的定义

哈夫曼树的构造

哈夫曼树的性质

 平衡二叉树

平衡二叉树的定义:

平衡二叉树的插入调整

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的右子树。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仿牛客项目Day10——统一异常处理、记录日志

统一异常处理 在controller里创建advice包&#xff0c;创建ExceptionAdvice类 这个注解括号里面是指只扫描被Controller标注的bean 请求request、响应response、异常exception 普通请求和异步请求的区别在于传的是json还是html吗&#xff1f; 统一记录日志 面向切面编程&…

IO多路复用、域套接字

思维导图 面试题TCP通信中的三次握手和四次&#xff1a; 客户端像向服务器端发送连接请求 服务器应答连接请求 客户端与服务器简历连接 客户端向服务器发送断开请求 服务器应答断开请求 服务器请求关闭连接 客户端发送确认应答 并行和并发的区别&#xff1a; 并行&#xff1a…

外包干了6天,技术明显进步。。。

我是一名大专生&#xff0c;自19年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年8月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…

R语言Meta分析核心技术:从入门到精通

R语言作为一种强大的统计分析和绘图语言&#xff0c;在科研领域发挥着日益重要的作用。其中&#xff0c;Meta分析作为一种整合多个独立研究结果的统计方法&#xff0c;在R语言中得到了广泛的应用。通过R语言进行Meta分析&#xff0c;研究者能够更为准确、全面地评估某一研究问题…

Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、管理员功能模块2、用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的Java时间管理系统-毕业论文答…

‘sc‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

问题描述&#xff1a; sc 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 通过mysql黑窗口命令 “sc delete 服务名” 删除mysql服务时系统报错&#xff1a;sc不是内部命令或外部命令 原因&#xff1a; 系统默认环境变量值发生变化&#xff1b; 解决&…

从零开始学习typescript系列6: typescript各种类型以及类型特殊使用

基础类型的分类 常用 boolean: 布尔值number: 支持2/8/10/16进制string: 字符串enum: 枚举类型&#xff0c;可根据value找到keyarray: 普通数组&#xff0c;有2种方式&#xff0c;string[]或者 Array<string>tuple: 特殊数组&#xff0c;指定数组里的每个元素的类型&am…

UE snap02 解析ASCII文本文件

UE snap02 解析ASCII文本文件 示例数据data.dat 11389477.2714892 3364559.73645693 0 11389471.5162524 3364567.8860295 0 11389471.5162524 3365813.09618369 0 11388329.6082659 3366184.85895869 0 11388320.4775297 3366197.78833087 0 11388270.6882384 3366214.84811…

爬虫实战-Python爬取百度当天热搜内容

爬虫实战-Python爬取百度当天热搜内容 学习建议学习目标预期内容目标分解热搜地址热搜标题热搜简介热搜指数小总结 代码实现总结 学习建议 本文仅用于学习使用&#xff0c;不做他用&#xff1b;本文仅获取页面的内容&#xff0c;作为学习和对Python知识的了解&#xff0c;不会…

2040X系列 电子校准件

苏/州/新/利/通 2040X系列 电子校准件 300kHz&#xff5e;67GHz 简述 2040X系列电子校准件包括20402/20403/20404/20405/20409五种型号&#xff0c;覆盖频段300kHz&#xff5e;18GHz/10MHz&#xff5e;26.5GHz/10MHz&#xff5e;50GHz/10MHz&#xff5e;20GHz/10MHz&#xf…

redis学习-Set集合类型相关命令及特殊情况分析

目录 1. sadd key value1 value2 ... 2. smembers key 3. sismember key value 4. scard key 5. srem key value1 value2 ... 6. srandmember key num 7. spop key num 8. smove key1 key2 value 9. sdiff key1 key2 key3 ... 10. sinter key1 key2 ... 11. sunion key1 key2 .…

鸿蒙一次开发,多端部署(二)从一个例子开始

本章通过一个天气应用&#xff0c;介绍一多应用的整体开发过程&#xff0c;包括UX设计、工程管理及调试、页面开发等。 UX设计 本示例中的天气应用包含主页、管理城市和添加城市三个页面&#xff0c;其中主页中又包含菜单和更新间隔两个弹窗&#xff0c;基本业务逻辑如下所示…

Aztec的客户端证明

1. 引言 隐私保护 zk-rollup 的证明生成与通用 zk-rollup 的证明生成有很大不同。原因是给定交易中存在特定数据&#xff08;由私有函数处理&#xff09;&#xff0c;我们希望保持完全私有。在本文中&#xff0c;我们探讨了用于证明私有函数正确执行的客户端证明生成&#xff…

arm-linux实现onvif server+WS-UsernameToken令牌验证

目录 一、环境搭建 1、安装openssl 2、安装bison 3、安装flex 二、gsoap下载 三、编译x86版本gsoap 四、编译arm-linux版本gsoap 1、交叉编译openssl 1.1、下载openssl 1.2、交叉编译 2、交叉编译zlib 2.1、下载zlib 2.2、交叉编译 3、交叉编译gsoap 3.1、编译过…

【嵌入式学习】Qtday03.21

一、思维导图 二、练习 自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面。&#xff08;不要使用课堂上的图片和代码&#xff0c;自己发挥&#xff0c;有利于后面项目的完成&#xff09; 要求&#xff1a; 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件…

深入了解 Spring boot的事务管理机制:掌握 Spring 事务的几种传播行为、隔离级别和回滚机制,理解 AOP 在事务管理中的应用

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

LeetCode 热题 100 | 堆(一)

目录 1 什么是堆排序 1.1 什么是堆 1.2 如何构建堆 1.3 举例说明 2 215. 数组中的第 K 个最大元素 2.1 子树大根化 2.2 遍历所有子树 2.3 弹出栈顶元素 2.4 完整代码 菜鸟做题&#xff0c;语言是 C 1 什么是堆排序 1.1 什么是堆 堆的定义和分类&#xff…

【c++入门】命名空间,缺省参数与函数重载

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff01;本篇内容我们进入一个新的阶段&#xff0c;进入c的学习&#xff01;希望我的博客内容能对你有帮助&#xff01; 目录 1.c关键字2.第一个c代码3.命名空间3.1 nam…

CTF-辨别细菌

题目描述&#xff1a;try your best to find the flag. 进入靶场后发现是一个游戏&#xff0c;需要全部答对才可以得到最后的flag 查看了一下源码&#xff0c;发现有一个答案模板的模块 尝试解释一下代码 <!-- 答案模版 --> <script id"template_game_pi…

数据结构/C++:红黑树

数据结构/C&#xff1a;红黑树 概念实现基本结构插入uncle为红色节点uncle为黑色节点 总代码展示 概念 红黑树是一种二叉搜索树&#xff0c;一般的二叉搜索会发生不平衡现象&#xff0c;导致搜索效率下降&#xff0c;于是学者们开始探索如何让二叉搜索树保持平衡&#xff0c;这…