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

进阶二叉树

目录

二叉树

二叉搜索树

二叉搜索树的定义

二叉搜索树的操作 

哈夫曼树

哈夫曼树的定义

哈夫曼树的构造

哈夫曼树的性质

 平衡二叉树

平衡二叉树的定义:

平衡二叉树的插入调整

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

相关文章:

进阶二叉树

目录 二叉树 二叉搜索树 二叉搜索树的定义 二叉搜索树的操作 哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的性质 平衡二叉树 平衡二叉树的定义&#xff1a; 平衡二叉树的插入调整 1.LL插入/LL旋转 2.RR插入/RR旋转 3.LR插入/LR旋转 4.RL插入/RL旋转 二叉树…...

无人机拦截

配置yolo CUDA报错 nvcc fatal : Unsupported gpu architecture compute_30.&#xff08;1&#xff09;查看显卡匹配型号&#xff1a;https://blog.csdn.net/u013308762/article/details/121658823 &#xff08;2&#xff09;查看显卡&#xff1a;nvidia-smi -a 》NVIDIA GeF…...

CSDN 编辑器设置图片缩放和居中

CSDN 编辑器设置图片缩放和居中 文章目录 CSDN 编辑器设置图片缩放和居中对齐方式比例缩放 对齐方式 Markdown 编辑器插入图片的代码格式为 ![图片描述](图片路径)CSDN 的 Markdown 编辑器中插入图片&#xff0c;默认都是左对齐&#xff0c;需要设置居中对齐的话&#xff0c;…...

有哪些工具可以替代Gitbook?这篇文章告诉你

你是否曾经在搜索在线文档创建和共享工具时&#xff0c;遇到了Gitbook? Gitbook 是一个相当出色的工具&#xff0c;具有强大的编辑和发布功能&#xff0c;但也有其不足之处&#xff0c;如使用起来有一定的技术要求&#xff0c;入门门槛较高等。如果你正在寻找Gitbook的替代品&…...

小迪安全43WEB 攻防-通用漏洞任意文件下载删除重装敏感读取黑白审计

#知识点&#xff1a; 1、文件操作类安全问题 2、文件下载&删除&读取 3、白盒&黑盒&探针分析 #详细点&#xff1a; 文件读取&#xff1a;基本和文件下载利用类似 文件下载&#xff1a;利用下载获取源码或数据库配置文件及系统敏感文件为后续出思路 …...

大模型提示学习样本量有玄机,自适应调节方法好

引言&#xff1a;探索文本分类中的个性化示例数量 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;预测模型已经从零开始训练演变为使用标记数据对预训练模型进行微调。这种微调的极端形式涉及到上下文学习&#xff08;In-Context Learning, ICL&#xff09;&…...

Redis监控工具

Redis 是一种 NoSQL 数据库系统&#xff0c;以其速度、性能和灵活的数据结构而闻名。Redis 在许多领域都表现出色&#xff0c;包括缓存、会话管理、游戏、排行榜、实时分析、地理空间、叫车、聊天/消息、媒体流和发布/订阅应用程序。Redis 数据集完全存储在内存中&#xff0c;这…...

低代码表单设计器为企业数字转型强劲赋能!

想要实现数字化转型&#xff0c;创造流程化办公&#xff0c;让企业在信息高速发展的社会中抢占更多市场份额&#xff0c;进一步提升市场竞争力&#xff0c;就需要借助专业的软件平台提高效率。低代码开发平台拥有易操作、灵活、可视化的发展优势&#xff0c;作为一种新型的应用…...

【C#】Conventions(惯例)最佳实践和准则

在C#中,Conventions(惯例)是指编写代码时的一套最佳实践和准则。这些惯例旨在提高代码的可读性、一致性和可维护性。虽然这些惯例不是语言的强制规则,但遵循它们可以使你的代码更加清晰和专业。 以下是一些常见的C#编码惯例: 命名约定: 使用有意义的、描述性的名称。类名和公…...

vue3中使用cesium

vue3中使用cesium Cesium是一个开源的JavaScript库&#xff0c;专门用于创建3D地球和2D地图的Web应用程序。它提供了丰富的功能和工具&#xff0c;使得开发人员能够轻松地构建出高质量的地理空间可视化应用。 1. 安装cesium包 npm install cesium2. 复制node_modules中的Ces…...

arduino ide 开发esp8266注意事项

1.引脚序列号必须是常量来定义&#xff0c;否则会无限重启。 #define p2 2 const int Pin2p2; pinMode(Pin2, OUTPUT); 2.关于wifi的模式&#xff0c;ap,sta&#xff0c;apsta三种模式的初始化必须放在void set_up(){}这个函数里&#xff0c;不能额外搞个自定义函数&#xf…...

RTC协议与算法基础 - RTP/RTCP

首先&#xff0c;需要说明下&#xff0c;webrtc的核心音视频传输是通过RTP/RTCP协议实现的&#xff0c;源码位于src/modules/rtp_rtcp目录下&#xff1a; 下面让我们对相关的内容基础进行简要分析与说明&#xff1a; 一、TCP与UDP协议 1.1、TCP协议 TCP为了实现数据传输的可…...

c语言游戏实战(8):飞机大作战

前言&#xff1a; 飞机大作战游戏是一种非常受欢迎的射击类游戏&#xff0c;玩家需要控制一架战斗机在屏幕上移动&#xff0c;击落敌机以获得分数。本游戏使用C语言编写&#xff0c;旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前&#xff0c;我们需要先了…...

docker 部署k8s相关命令操作

1.安装docket 可参考其他网站 2.docker ps 3.docker images 4.docker ps -all 5.docker pull openjdk:8 安装jdk8 6.docker load < jdk.tar 自己有jdk8 7.打包jar服务 &#xff0c;需要依赖一个打包文件Dockerfile&#xff0c;如下 文件内容如下 FROM openjdk:8u275-j…...

使用Tesseract识别中文 并提高精度

1. 使用中文训练数据 在使用pytesseract进行中文文本识别时&#xff0c;确保安装了中文的训练数据文件。在Tesseract的安装目录下的tessdata文件夹中应包含一个名为chi_sim.traineddata&#xff08;简体中文&#xff09;或chi_tra.traineddata&#xff08;繁体中文&#xff09…...

基于Jenkins + Argo 实现多集群的持续交付

作者&#xff1a;周靖峰&#xff0c;青云科技容器顾问&#xff0c;云原生爱好者&#xff0c;目前专注于 DevOps&#xff0c;云原生领域技术涉及 Kubernetes、KubeSphere、Argo。 前文概述 前面我们已经掌握了如何通过 Jenkins Argo CD 的方式实现单集群的持续交付&#xff0c…...

关于javascript数字精度丢失的解决办法

分析原因 众所周知&#xff0c;在JavaScript中计算两个十进制数的和&#xff0c;有时候会出现令人惊讶的结果&#xff0c;主要原因是计算机将数据存储为二进制所引起的&#xff0c;所以这并不是javascript存在的缺陷&#xff0c;而在其他语言中也有类似的问题。 例如下面的例子…...

每日一题 第二十一期 洛谷 组合的输出

组合的输出 题目描述 排列与组合是常用的数学方法&#xff0c;其中组合就是从 n n n 个元素中抽出 r r r 个元素&#xff08;不分顺序且 r ≤ n r \le n r≤n&#xff09;&#xff0c;我们可以简单地将 n n n 个元素理解为自然数 1 , 2 , … , n 1,2,\dots,n 1,2,…,n&a…...

JavaScript 面试题

问题 1 // 请解释什么是 JavaScript 中的原型继承&#xff0c;以及原型链的概念答案 1 原型继承是 JavaScript 中实现继承的一种方式&#xff0c;每个对象都有一个指向另一个对象的引用&#xff0c;这个对象就是原型。当访问对象的属性或方法时&#xff0c;如果对象本身没有该…...

java输入语句scanner

在Java中&#xff0c;Scanner 类是 java.util 包中的一个类&#xff0c;它用于获取用户的输入。要使用 Scanner 类&#xff0c;你首先需要导入这个类&#xff0c;然后创建一个 Scanner 对象&#xff0c;通常命名为 scanner。你可以使用这个对象来读取用户从键盘输入的数据。 以…...

从Gamma函数到泊松分布:一个概率论中的含参量积分实用案例解析

Gamma函数与泊松分布&#xff1a;概率论中的数学之美 在数据科学和机器学习的实践中&#xff0c;概率分布构成了建模的基石。当我们深入探究这些分布背后的数学原理时&#xff0c;Gamma函数以其优雅的性质和广泛的应用脱颖而出。它不仅连接了离散与连续概率世界&#xff0c;更在…...

新手村任务:成为一个架构师需要哪些装备?

新手村任务:成为一个架构师需要哪些装备? 一、前言 如果你刚入行不久,想成为一名架构师,那这篇文章就是为你写的。 我们把成为架构师比作一个RPG游戏,你是主角,需要收集各种装备、刷经验、升级技能。 新手村的第一个任务就是:了解你需要哪些装备。 二、架构师技能树…...

Windows 10/11系统下,SecureCRT 8.7.2保姆级安装与激活图文指南(含Keygen使用避坑点)

Windows平台SecureCRT 8.7.2全流程部署与安全配置指南在当今远程运维与网络管理的日常工作中&#xff0c;一款可靠的终端仿真工具如同工程师的瑞士军刀。作为行业标杆的SecureCRT&#xff0c;其8.7.2版本在Windows 10/11环境下的部署却常让新手陷入各种技术陷阱——从安装路径选…...

Arcmap实操:如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例

Arcmap实操&#xff1a;如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例 想象一下&#xff0c;医生通过CT扫描将人体内部结构分层呈现&#xff0c;而GIS中的"渔网"工具同样能对城市路网进行"切片式"分析。这种空间离散化技术&…...

Elden Ring帧率解锁终极指南:从60帧到144+的完整教程

Elden Ring帧率解锁终极指南&#xff1a;从60帧到144的完整教程 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/Elden…...

掌握Umi-OCR:5分钟上手开源免费离线文字识别工具

掌握Umi-OCR&#xff1a;5分钟上手开源免费离线文字识别工具 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语言库。…...

3大技术突破:重新定义Switch游戏安装性能极限

3大技术突破&#xff1a;重新定义Switch游戏安装性能极限 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为破解版Nintendo…...

【独家首发】DeepSeek官方未公开的集成测试Checklist(含23项生产环境准入阈值与压测基线)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek集成测试方案 DeepSeek模型的集成测试需覆盖推理服务稳定性、多模态输入兼容性、上下文长度边界及API协议一致性四大核心维度。测试环境基于Kubernetes集群部署&#xff0c;采用PrometheusGrafana监控…...

程序员的物理级打字肌肉记忆训练指南:从一指禅到无意识盲打的科学路径

程序员的物理级打字肌肉记忆训练指南&#xff1a;从一指禅到无意识盲打的科学路径 在日常写代码或重构时&#xff0c;你是否遇到过这种场景&#xff1a; 脑子里已经构思好了完美的重构逻辑&#xff0c;但在输入 >、{} 或 _ 时&#xff0c;手指本能地一顿&#xff0c;视线不…...

WaveTools鸣潮工具箱:3步完成游戏性能优化与配置调校的完整指南

WaveTools鸣潮工具箱&#xff1a;3步完成游戏性能优化与配置调校的完整指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools鸣潮工具箱是一款专为《鸣潮》玩家设计的开源性能优化工具&#xff0c…...