进阶二叉树

news2024/9/24 3:28:00

目录

二叉树

二叉搜索树

二叉搜索树的定义

二叉搜索树的操作 

哈夫曼树

哈夫曼树的定义

哈夫曼树的构造

哈夫曼树的性质

 平衡二叉树

平衡二叉树的定义:

平衡二叉树的插入调整

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.coloradmin.cn/o/1534358.html

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

相关文章

GPT-5什么时候会发布

1、前言 GPT-5预计将在夏季震撼发布&#xff0c;其卓越的性能和尚未公布的新功能已经引起了广泛关注。企业客户已有幸体验到了它的演示版&#xff0c;纷纷对其赞不绝口。OpenAI团队正在紧锣密鼓地进行最后的训练和优化&#xff0c;以确保GPT-5在发布时能够展现出最完美的状态。…

多线程(JUC, ReentrantLock, 原子类, 线程池, 信号量 Semaphore, CountDownLatch)

JUC Java.util.concurrent 包, 存放了并发编程相关的组件, 目的是更好的支持高并发任务 (多线程只是实现并发编程的一种具体方式 …) ReentrantLock 可重入互斥锁, 和 synchronized 定位类似, 用来实现互斥效果, 保证线程安全. synchronized 对对象加锁, 保护临界资源Reentreat…

吐槽FineDataLink工具Format函数处理日期转字符串格式的说明文档

一.背景 为公司师带徒的任务做些记录。 二.文档存在的问题 1.文档情况 FORMAT-格式转换- FineBI帮助文档 FineBI帮助文档 函数定义&#xff1a; FORMAT(object,format) formart的格式有哪些呢&#xff1f;我们截图看看&#xff1a; 2.文档说明不足问题 同事的需求是把时…

【C++ STL】string类最全解析(什么是string?string类的常用接口有哪些?)

目录 一、前言 二、什么是 string ? &#x1f4a6; string 类的基本概念 &#x1f4a6; string 类与 char * 的区别 &#x1f4a6; string 类的作用 &#x1f4a6; 总结 三、string 的常用接口详解 &#x1f4a6;string 类对象的默认成员函数 ① 构造函数(初始化) ② 赋值…

无管理员权限linux系统安装cmake

去官网下载所需版本&#xff1a;https://cmake.org/download/ 之后解压 安装 cd cmake-x.xx.xx ./bootstrap DESTDIRpath make install makebashrc中添加 export PATH"path/bin:$PATH"查看是否安装成功 source ~/.bashrc cmake --version安装成功 参考&#x…

关于汽车中网改装需要报备吗?(第二天)

车联网改造需要申报吗&#xff1f; 今天2022年10月20日&#xff0c;小编就给大家介绍一下车联网改装是否需要申报的相关知识。 让我们来看看。 汽车格栅改装无需申报。 这种年检可以直接通过。 您不必担心&#xff0c;因为汽车格栅对于实车的外观来说并不陌生&#xff0c;因此…

若依添加页面

背景&#xff1a;我想增加的是一个收支管理的页面 views中直接添加income文件夹&#xff0c;里面放着index.vue 网页的菜单中添加这个页面的菜单

基于springboot的医院医护人员排班系统

技术&#xff1a;springbootvuemysql 一、系统背景 本医护人员排班系统管理员&#xff0c;医护。管理员功能有个人中心&#xff0c;医院信息管理&#xff0c;医护信息管理&#xff0c;医护类型管理&#xff0c;排班信息管理&#xff0c;排班类型管理&#xff0c;科室信息管理&…

中国网怎么投稿,发稿流程,中国网发稿需要多少钱?(附中国网各频道价格明细)

中国网是一家专业的新闻媒体平台&#xff0c;拥有庞大的读者群体和高质量的新闻内容。很多企业和个人都希望能够在中国网上发布自己的文章或新闻&#xff0c;以增加曝光度和影响力。那么&#xff0c;中国网如何投稿&#xff1f;发稿流程是怎样的&#xff1f;又需要多少费用呢&a…

4款原创检测工具,帮你快速掌握文章质量

在如今信息爆炸的时代&#xff0c;人们在网上发布和浏览大量的文字内容。然而&#xff0c;随之而来的问题是大量的抄袭和非原创内容充斥着网络空间&#xff0c;这不仅影响了文章的质量&#xff0c;也降低了读者对内容的信任度。为了帮助作者和编辑快速提升文章质量&#xff0c;…

XCode升级错误:Command CompileC failed with a nonzero exit code 解决办法

升级完XCode之后&#xff0c;bulid失败&#xff0c;出现如下错误&#xff1a; 问题1&#xff1a; xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrunCommand Compi…

一命通关广度优先遍历

前言 在这篇文章之前&#xff0c;已对非线性结构遍历的另一种方法——深度优先遍历进行了讲解&#xff0c;其中很多概念词都是共用的。为了更好的阅读体验&#xff0c;最好先在掌握或起码了解dfs的基础上&#xff0c;再来阅读本文章&#xff0c;否则因为会有很多概念词看不明白…

Spring框架(下半部分 -AOP)

1.2 AOP相关的概念 1.2.1 AOP的概述 什么是AOP的技术&#xff1f; 在软件业&#xff0c;AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程 AOP是一种编程范式&#xff0c;隶属于软工范畴&#xff0c;指导开发者如何组织程序结构AOP最早由AO…

【开源-土拨鼠充电系统】鸿蒙 HarmonyOS 4.0 App+微信小程序+云平台

✨本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✨踩坑不易&#xff0c;还希望各位大佬支持一下&#xff0c;在Gitee或GitHub给我点个 Start ⭐⭐&#x1f44d;&#x1f44d; ✍Gitee开源项目地址&#x1f449;&#xff1a;https://gitee.com/cheinlu/groundhog-charging…

多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测

多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测 目录 多维时序 | MATLAB实现BiTCN-selfAttention自注意力机制结合双向时间卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.M…

深度学习_20_卷积中的填充与步幅

如果图片本身比较小&#xff0c;卷积之后输出也会很小&#xff0c;那么可以在图片与卷积核相乘之前先填充一下&#xff0c;让输出为预期大小 一般填充后输入&#xff0c;输出相同 当图片比较大的时候&#xff0c;如果利用卷积核去得到我们想要的大小的话&#xff0c;得用到多层…

Linux虚拟主机如何快速卸载一键安装的网站程序

接到一位用户发送的请求帮助&#xff0c;想要卸载通过Softaculous一键安装的网站程序&#xff0c;但是没有找到地方&#xff0c;根据与该用户的沟通得知是一个小白用户&#xff0c;想要自己搭建一个博客类的网站&#xff0c;了解到Hostease 有适合新用户并且带管理面板的产品Li…

Nginx:部署及配置详解(linux)

Nginx&#xff1a;部署及配置详解&#xff08;linux&#xff09; 1、nginx简介2、安装编译工具及库文件3、安装 pcre4、nginx安装5、nginx配置文件nginx.conf组成6、nginx配置实例-反向代理7、nginx 配置实例-负载均衡 &#x1f496;The Begin&#x1f496;点点关注&#xff0c…

代码随想录算法训练营第day53|1143.最长公共子序列 、 1035.不相交的线、 53. 最大子序和 动态规划

目录 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 1143.最长公共子序列 力扣题目链接(opens new window) 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原…

【嵌入式——QT】QT Charts

【嵌入式——QT】QT Charts 概述Qt提供的坐标轴类QChartQLineSeriesQValueAxis常见图表及用到的序列类图示代码示例 概述 QT Charts模块是一组易于使用的图表组件&#xff0c;它基于Qt的Graphics View架构&#xff0c;其核心组件是QChartView和QChart&#xff0c;QChartView父…