平衡二叉树介绍

news2024/9/24 19:22:54

一、树的概念

1.1 空树和非空树

空树:结点数为0的树
非空树:有且仅有一个根节点。其中,没有后继的结点叫叶子结点,有后继的结点叫做分支结点。
如下图所示:
在这里插入图片描述

1.2树的属性

除了根结点外任何一个结点都有且仅有一个前驱
树的高度:总共多少层
结点的深度:从上往下数
结点的度:即有几个分支,叶子结点的度是0,非叶子结点的度>0
树的度:各结点的度的最大值

二、二叉树的概念

2.1 二叉树的介绍

二叉树是n个结点的有限集合:
①或者为空二叉树,即n = 0。
②或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。
特点:①每个结点至多只有两棵子树
②左右子树不能颠倒(二叉树是有序树)
在这里插入图片描述

2.2 二叉排序树的介绍

二叉排序树:一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树:
左子树上所有结点的关键字均小于根结点的关键字,
右子树上所有结点的关键字均大于根结点的关键字。
左子树和右子树又各是一棵二叉排序树。
在这里插入图片描述

2.3 平衡二叉树的引入

平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1。它可以在插入和删除节点时自动调整树的结构,使得树的高度保持在一个较小的范围内,从而提高了树的查找、插入和删除的效率。在数据库中,索引是一种用于加速数据检索的数据结构。平衡二叉树可以用来实现数据库的索引,它可以快速地定位到需要查找的数据,从而提高了数据库的查询效率。
在这里插入图片描述

其中,结点的平衡因子=左子树高-右子树高,故平衡二叉树中结点的平衡因子只可能是1,-1,0。

2.3.1 调整最小不平衡子树(LL型)

在这里插入图片描述
每次调整的对象都是“最小不平衡子树”,即从插入点往回找到第一个不平衡结点,调整以该结点为根的子树。下面看一个实例:
在这里插入图片描述
只有假设BL 、BR 、AR的高度都是H才可以保证在原本就平衡的基础上,插入数据之后A为最小不平衡字树。
调整规则:二叉排序树的特性:左子树结点值<根结点值<右子树结点值,即BL<B<BR<A<AR
调整过程:由于在结点A的左孩子(L)的左子树(L)上插入了新结点,A的平衡因子由1增至2,导致以A为根的子树失去平衡。那么怎么再次恢复平衡呢?需要一次向右的旋转操作:将A的左孩子B向右上旋转代替A成为根结点,将A结点向右下旋转成为B的右子树的根结点,而B的原右子树则作为A结点的左子树。调整之后如下图:
在这里插入图片描述
除此之外还有RR型、 LR型、 RL型等,对此感兴趣的小伙伴可以自行课下探索。

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

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

相关文章

阿里Java开发手册~应用分层

1. 【推荐】图中默认上层依赖于下层&#xff0c;箭头关系表示可直接依赖&#xff0c;如&#xff1a;开放接口层可以依赖于 Web 层&#xff0c;也可以直接依赖于 Service 层&#xff0c;依此类推&#xff1a; 开放接口层 &#xff1a;可直接封装 Service 方法暴露成 RP…

600就能用上7000MHz的DDR5内存,这套32GB的光威天策真是快又稳

大家都知道&#xff0c;DDR5内存性能提升很大&#xff0c;而且Intel 13代平台和AMD Zen 4平台都已经兼容了&#xff0c;可以带来更稳定的性能表现&#xff0c;之前因为DDR5内存价格高昂&#xff0c;许多消费者望而却步&#xff0c;而随着今年DDR5内存售价的逐渐下降&#xff0c…

css3的filter图片滤镜使用

业务介绍 默认&#xff1a;第一个图标为选中状态&#xff0c;其他三个图标事未选中状态 样式&#xff1a;选中状态是深蓝&#xff0c;未选中状体是浅蓝 交互&#xff1a;鼠标放上去选中&#xff0c;其他未选中&#xff0c;鼠标离开时候保持当前选中状态 实现&#xff1a;目前…

Docker的数据管理和Dockerfile的指令

Docker的数据管理 一、Docker数据的概念1、数据卷2、数据卷容器 二、端口映射三、容器互联&#xff08;使用centos镜像&#xff09;四、Docker 镜像的创建1、基于现有镜像创建&#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改&#xff08;2&#xff09;然…

经营在线业务的首选客服工具--SS客服

随着网购正在快速取代传统零售业&#xff0c;各行各业的企业都在大力发展电子商务以取悦客户。但是&#xff0c;有这么多可用的电子商务平台&#xff0c;选择一款符合自己发展的平台确实不容易。电子商务平台不仅是企业在线销售产品和服务的地方&#xff0c;也是他们管理日常运…

Vue2基础三、计算属性侦听器

零、文章目录 Vue2基础三、计算属性&侦听器 1、计算属性computed &#xff08;1&#xff09;基础语法 概念&#xff1a; 基于现有的数据&#xff0c;计算出来的新属性。 依赖的数据变化&#xff0c;自动重新计算。计算属性会对计算出来的结果缓存&#xff0c;再次使用…

Linux三剑客与正则

目录 正则表达式 text测试文件 正则符号分类 基础正则符号 正则表达式的贪婪性 扩展正则符号 linux三剑客 三剑客特点及应用场景 grep sed sed命令执行过程 sed查找script sed删除script sed增加script 具体功能 具体script sed替换script 后向引用 awk aw…

虹科新闻 | 虹科与Berghof正式建立合作伙伴关系

近日&#xff0c;虹科与德国Berghof公司达成战略合作&#xff0c;虹科正式成为Berghof Automation在大中华区的认证授权代理商。未来&#xff0c;虹科将携手Berghof一同为机器制造商、系统集成商和工业设备制造商提供先进的解决方案&#xff0c;从而在最小的空间内实现最高的性…

vue项目:SyntaxError: Unexpected token ‘:‘

运行项目时出现了如下问题&#xff1a; 经过排查&#xff0c;是因为代码中使用了ts&#xff08;TypeScript&#xff09;的写法&#xff1a; 解决办法&#xff1a;在script标签加上 lang“ts” 即可

软件设计师学习第一章

计算机组成与体系结构&#xff08;6分&#xff09; 内容概述 数据的表示 进制转换 R 进制转十进制使用按权展开法&#xff0c;其具体操作方式为&#xff1a;将 R 进制数的每一位数值用 Rk 形示&#xff0c;即幂的底数是 R &#xff0c;指数为 k &#xff0c; k 与该位和小数点…

uniapp 选择城市定位 根据城市首字母分类排序

获取城市首字母排序&#xff0c;按字母顺序排序 <template><view class"address-wrap" id"address"><!-- 搜索输入框-end --><template v-if"!isSearch"><!-- 城市列表-start --><view class"address-sc…

DevOps-Git

DevOps-Git 版本控制软件提供完备的版本管理功能&#xff0c;用于存储&#xff0c;追踪目录&#xff08;文件夹&#xff09;和文件的修改历史。版本控制软件的最高目标是支持公司的配置管理活动&#xff0c;最终多个版本的开发和维护活动&#xff0c;即使发布软件。 git安装 h…

Python获取天气数据 并做可视化解读气象魅力

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 前几天的长沙&#xff0c;白天大太阳&#xff0c;晚上下暴雨 一点也琢磨不透天气老人家它的想法 顺便哔哔一点生活小插曲&#xff1a; 前几天的时候&#xff0c;我出门&#xff0c;家里的几扇窗户开着在透气 等我十一点回…

了解Unity编辑器之组件篇Layout(八)

Layout&#xff1a;用于管理和控制UI元素的排列和自动调整一、Aspect Ratio Fitter&#xff1a;用于根据宽高比自动调整UI元素的大小 Aspect Mode&#xff1a;用于定义纵横比适配的行为方式。Aspect Mode属性有以下几种选项&#xff1a; &#xff08;1&#xff09;None&#xf…

开源预训练框架 MMPRETRAIN现有的推理模型(三)

推理器类型&#xff1a; &#xff08;1&#xff09;ImageClassificationInferencer&#xff1a;对给定图像进行图像分类。 &#xff08;2&#xff09;ImageRetrievalInferencer&#xff1a;从给定图像集上的给定图像执行图像到图像检索。 &#xff08;3&#xff09;ImageCapti…

FS32K144用官方Bootloader为底层用RAppIDL BL Tool工具下载升级程序

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 一、工具问题 1、可以在NXP的官网上找到这个软件&#xff0c;也可以加载完成NXP的官方库后找到它&#xff08;自动安装的&#xff09;&#xff0c;也可我…

【接口测试】Postman--变量与集合

目录 变量与集合 一、变量 1、环境变量&#xff08;1&#xff09;创建环境变量&#xff08;2&#xff09;管理环境变量&#xff08;3&#xff09;选择与编辑环境变量2、全局变量&#xff08;1&#xff09;管理全局变量二、集合 1、创建集合2、保存请求到集合3、分享集合三、集…

链表是否有环、环长度、环起点

问题引入 如何检测一个链表是否有环&#xff0c;如果有&#xff0c;那么如何确定环的长度及起点。 引自博客&#xff1a;上述问题是一个经典问题&#xff0c;经常会在面试中被问到。我之前在杭州一家网络公司的电话面试中就很不巧的问到&#xff0c;当时是第一次遇到那个问题&…

【数据结构】实验一:绪论

实验一 绪论 一、实验目的与要求 1&#xff09;熟悉C/C语言&#xff08;或其他编程语言&#xff09;的集成开发环境&#xff1b; 2&#xff09;通过本实验加深对算法时间复杂度的理解&#xff1b; 3&#xff09;结合具体的问题分析算法时间复杂度。 二、实验内容 设计程…

C# PaddleDetection 目标检测 ( yolov3_darknet)

效果 项目 VS2022.net4.8OpenCvSharp4Sdcb.PaddleDetection 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using Sdcb.PaddleDetection; using Sdcb.PaddleInference; using System; using System.Drawing; using System.Windows.Forms; using YamlDotNet;namespa…