平衡二叉树

平衡二叉树的实现代码 前面已经讲过平衡二叉树的实现原理以及实例 原理参见 http://blog.csdn.net/wxbmelisky/article/details/47755753      实例参见 http://blog.csdn.net/wxbmelisky/article/details/47787963 平衡二叉树的实现代码如下 阅读详情

前言

       二叉排序树(又称二叉查找树、二叉搜索树),在进行查找、插入及删除操作时其平均时间复杂度为O(logn),但是它们的最坏时间复杂度都是O(n)和顺序查找的效率相同,出现这种情况的原因在于它们虽然对关键字值进行了排序,但是并没有对树的形状进行限制。即当关键字序列有序时,就会出现这种最坏情况(单侧的二叉树),平衡二叉树的引入就可以对其进行有效调整。

       例如:对于关键字序列(12,24,37,45,53,93)建立二叉排序树为图(b),调整成为平衡二叉树后为图(a)

       平衡二叉树又称AVL树,它或者是一棵空树,或者是它的左、右树都是平衡二叉树且左、右字数的高度之差的绝对值不超过1。平衡二叉树的重点和难点就是,在一棵二叉排序树中插入结点后,将其调整为平衡二叉树。对于失去平衡的二叉树可以归纳为4种类型:RR型、LL型、RL型、LR型

4种类型

(1)RR型——单向左旋平衡处理

       在A的右孩子C的右子树E上插入结点F,A的平衡因子由-1变为-2,二叉树失去平衡。此时需要进行一次逆时针旋转,使C左上旋转代替A作为根节点,A左下旋转为C的左孩子,且C原来的左子树变为A的右子树

 

(2)LL型——单向右旋平衡处理

       在A的左孩子B的左子树C上插入结点F,A的平衡因子由1变为2,二叉树失去平衡。此时需要进行一次顺时针旋转,使B右上旋转代替A作为根节点,A右下旋转为B的右孩子,且B原来的右子树变为A的左子树

(3)RL型——双向旋转,先右后左

       在A的右孩子C的左子树D上插入结点F,A的平衡因子由-1变为-2,二叉树失去平衡。此时需要进行两次旋转,将二叉树分为两部分:第一次旋转是将圈中D结点右上旋转为代替C结点,C结点右下旋转变为D的右孩子,使整个二叉树变为RR型;第二次旋转按照RR型的调整方法进行操作即可

 

(4)LR型——双向旋转,先左后右

       在A的左孩子B的右子树D上插入结点F,A的平衡因子由1变为2,二叉树失去平衡。此时需要进行两次旋转,将二叉树分为两部分:第一次旋转是将圈中D结点左上旋转代替B结点,B结点左下旋转变为D的左孩子,使整个二叉树变为LL型;第二次旋转按照LL型的调整方法进行操作即可

 

       在对排序二叉树进行调整时,先从整体上看它属于哪种类型,确定了类型后再按照对应的平衡化方法进行调整。(注意:在做题的过程中切忌只看局部而忽略了整体,将RR或LL型的二叉树旋转两次,从而导致错误的结果)

小结:

        平衡二叉树的调整很简单,只是用文字叙述起来很累赘,看图会比较清晰易懂。其它类型的排序二叉树可由以上4种类型转换得到,其中平衡化的核心就是“旋转优先”,掌握了这4种调整规律,平衡二叉树也就理解的差不多了

 

 

平衡二叉树及其算法实现 文章目录1、平衡二叉树1.1、什么是二叉搜索树1.2、二叉搜索树的缺点1.3、平衡二叉树的提出1.4、如何构建平衡二叉树(ALV树)1.5 失衡情况及其处理(4种)1.5.1 LL——(右旋)1.5.2 RR——(左旋)1.5.3 LR——>(先左旋再右旋)1.5.4 RL——>(先右旋再左旋)1.5.5 总结代码实现1.5.6 小结1.5.7 删除结点后该如何调整平衡二叉树? 1、平衡二叉树 1.1、什么是二叉搜索树 1.2、二叉搜索树的缺点 二叉树查找算法查找时间依赖于树的拓扑结构。查找效 阅读详情

相关推荐

串级PID 位置环+速度环

串级PID 位置环+速度环

weixin_62775618的博客 9109

基础数据结构——二叉树

二叉树性质:每个结点最多有两个子节点:左孩子、右孩子。以它们为根的子树称为左子树、右子树。二叉树的第 i 层,最多有 2^i-1 个节点。二叉树的每个节点不必全有左、右孩子,可以只有一个孩子或没有孩子,没有孩子的结点称为叶子节点。

m0_52711790的博客 1550

AutoCAD Plant 3D自定义零件库实战:手把手教你用Python创建参数化槽式三通

本文详细介绍了如何利用Python脚本在AutoCAD Plant 3D中创建参数化槽式三通组件,从API原理到实战开发,帮助用户构建高效的自定义零件库。通过Python装饰器系统控制零件属性和行为,实现几何建模、参数管理和规格编辑器集成,提升工业管道设计的标准化和效率。

weixin_28267011的博客 331

平衡树与非平衡树简介

平衡树与非平衡树的简单介绍。

iFleetingtime的博客 3016

stm32开发3D打印机(一)——介绍(已完成)

如何运用stm32开发3D打印机

Nico_jion的博客 1万+

Xtract or Ucfyber的最条理的整理入门级教程

XTRACT可以对任意截面进行全过程截面分析。工程中常用来分析各种截面(如异形柱、组合截面等)的非线性特征点及承载力校核。 xtract主要思路也是根据各种材料本构关系,基于平截面假定,用fiber划分截面进行全过程非线性分析。......

→★佐佑思维★← 8399

判断一棵二叉树是否是平衡二叉树

我们先来整理一下什么是平衡二叉树? 满足以下两点的就是平衡二叉树: 1.左右子树的高度差不能超过1 2.左右子树也是平衡二叉树 需要注意的是空树也是平衡二叉树 例如下面这棵树就不是平衡二叉树 因为对于B来说左右子树高度超过了1,所以它不是平衡二叉树。 方法一: 这样的话,如果是空树则是平衡二叉树,如果不是空树,我们就去判断左子树是不是平衡二叉树,判断的依据就是左右子树高度差不超过1,代码如...

L_R 1万+

别再只调颜色阈值了!优化K210色块追踪性能的5个关键参数与实战技巧

本文深入探讨了K210色块追踪性能优化的五大核心策略,包括图像预处理参数精细调控、find_blobs参数进阶配置、运动控制算法升级、硬件时序优化以及可视化调试系统构建。通过实战技巧和参数调整方法,帮助开发者提升K210在色块追踪项目中的识别稳定性和响应速度,适用于云台追踪等应用场景。

weixin_42531588的博客 225

【二叉树】平衡二叉树的判断

知识点 平衡二叉树的性质 1、空树是一棵平衡二叉树 2、一棵树不为空,并且其中所有的子树都满足各自的左子树与右子树的高度差都不超过1. 这棵以节点1为头的整棵树树不是平衡二叉树,因为以2节点为头的左子树的高度为2,右子树高度为0. 题目 给定一个二叉树的头节点head,判断该二叉树是否是平衡二叉树,如果是,返回平衡二叉树的深度,如果不是,返回false; 思路 对头节点head...

gulaixiangjuejue的博客 477

从业10年的AI应用架构师:企业AI平台运营的4个核心经验,值得收藏

去年年底,我在某大型制造企业做AI咨询时,遇到了这样的场景:这不是个例。我接触过的10家企业中,有7家的AI平台都陷入了“技术自嗨”的陷阱——技术团队追求模型精度、功能完备性,却忽略了业务到底需要什么。如果你也遇到过类似问题:比如“模型准确率很高,但业务不买账”“AI项目上线后没人用”“投入产出比极低”,那么这篇文章的4个经验,可能会帮你避开这些坑。很多企业认为,AI平台就是“买一套工具+部署几个模型”。但实际上,企业AI平台的本质是“技术与业务的连接生态”:根据Gartner的报告,80%的企业AI项目失

AI 原生应用开发的博客 709

python读取并可视化npy格式的深度图文件以及将其保存为jpg图片的方法

  npy文件是无法直接打开的,它里面包含的是一个矩阵格式的数据,可以用于存储图像。为了对其进行可视化,需要将其转换为图像。这里需要用到numpy包以及matplotlib包,没有的话就pip install一下吧。现进入包含有npy文件的目录(我的该目录下有一个名为0000.npy的文件),然后打开一个终端,执行python进入pythn命令行模式,依次输入如下代码即可: import numpy as np import matplotlib.pyplot as plt depthmap = np.lo

zeeq的博客 5万+

数据结构-非线性结构-树形结构:有序树 ->二叉树 ->平衡二叉树(任何节点的左右子树的高度差不大于1)-> 红黑树(O(logn))【严格来说,不是平衡二叉树;平均来说红黑树比AVL树快一些】

2-3树【不是二叉树,是一颗绝对平衡的树(左右子树的高度一定相等)】【2-3树与红黑树等价】 2-3树动画: 红黑树是保持 “黑节点绝对平衡” 的二叉树;严格意义上,红黑树不是平衡二叉树;最大高度为 2logn2logn2logn时间复杂度:O(logn)O(logn)O(logn)如果创建后只查询,则AVL树的性能比红黑树高一些(AVL树高度为lognlognlogn,红黑树的高度为 2logn2logn2logn);如果创建后经常添加、删除元素,则红黑树的效率比AVL树高;...

u013250861的博客 426

使用Navicat连接Oracle数据库及ORA-12541: TNS: 无监听程序、ORA-28547:connection to server failed、ORA-12514:TNS报错解决方案

使用Navicat连接Oracle数据库及ORA-12541: TNS: 无监听程序、ORA-28547:connection to server failed、ORA-12514:TNS报错解决方案。

蓝多多的小仓库 5219

平衡二叉树的删除

平衡二叉树的删除平衡二叉树的删除平衡二叉树删除节点的三种情况删除叶子节点被删的结点只有左子树或只有右子树被删的结点既有左子树又有右子树   平衡二叉树的删除 平衡二叉树是最优的二叉排序树,因此删除操作,也和二叉排序树的删除差不多,只是在删除完节点后,要重新判断左右孩子的深度,如果失衡,就要调整   平衡二叉树删除节点的三种情况 ① 被删除的节点为叶子节点,就找到了要删除的节点 ② 被删除的节点有左子树或者右子树 ③ 被删除的节点既有左子树,又有右子树 我们需要知道这么一点,左子树上节点的

只是个人笔记,请见谅 7308

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

平衡二叉树详解

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。 平衡二叉树大部分操作和二叉查找树类似,主要不同在于插入删除的时候平衡二叉树的平衡可

尽量致力于发表微服务、中间件和算法等原创作品。 4万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【数据结构】平衡二叉树

平衡二叉树的插入方法。

学了就忘是正常现象 5224

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

判断平衡二叉树

1.题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 2.具体算法 class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot==NULL) return true;//当根节点为空是,返回true int LeftDepth = Get_Depth(pRoot->left)

weixin_42534963的博客 3117

C语言实现平衡二叉树

文章目录前言一、平衡二叉树实现原理二、平衡二叉树实现算法三、全部代码 前言 对于判断是否为平衡二叉树而言,我们需要知道以下特性: 是一个二叉树 也是一个二叉排序树 该树的每个结点上的(深度)左子树 - 右子树的值为平衡因子(BF(Balance Factor)) 该树的每一个节点的左子树和右子树的高度至多等于1(平衡因子只可能是-1,0,1) 对于一个二叉排序树而言,它们的结构都是根据了二叉树的特性从最左子树开始在回到该结点上继续往右结点走,通过该方式进行递归操作,并且该二叉排序树的结构也是从小到大依

weixin_45859193的博客 2800

平衡二叉树的构造与实现

平衡二叉树简称平衡树,是由Adelson-Velskii和Landis于1962年首先提出的,所以又称为AVL树。若一棵二叉树的每个左右节点的高度差最多相差1,此二叉树即是平衡二叉树。把二叉树的每个节点的左子树减去右子树定义为该节点的平衡因子。二叉平衡树的平衡因子只能是1、0或者-1。         平衡二叉树是对二叉搜索树(又称为二叉排序树)的一种改进。二叉搜索树有一个缺点就是,树的结构是无

初来乍到 8483

平衡二叉树例题_平衡二叉树专题

力扣关于平衡二叉树的题目还是有一些的,并且都非常经典,推荐大家练习。今天给大家精选了 4 道题,如果你彻底搞明白了这几道题,碰到其他的平衡二叉树的题目应该不至于没有思路。当你领会了我的思路之后, 建议再找几个题目练手,巩固一下学习成果。110. 平衡二叉树(简单)最简单的莫过于判断一个树是否为平衡二叉树了,我们来看下。题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树...

weixin_39846191的博客 1944

平衡二叉树(AVL)(BBT)

1、灵魂三问 1.1、为什么引入平衡二叉树这种结构? 为避免树的高度增长过快,导致降低二叉排序树的性能。 1.2 什么是平衡二叉树

YKbsmn的博客 3333

平衡二叉树ALVBinaryTreeList

简介:本文介绍平衡二叉树基本概念,并通过继承AbstractBinaryTree抽象类,java实现ALVBinaryTreeList,主要操作算法有插入和删除。 一、平衡二叉树基本概念 1.平衡二叉树是什么? 平衡二叉树时一种结构平衡的二叉树,即叶节点高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 2.为什么会出现平衡二叉树? 1)二叉树插入时存在最坏情况,导致查找的时间复杂度为O(n)。例如:顺序插入1,2,3,...,时,二叉树严重失衡,退化为普通链表,查找时间复杂.

jainszhang的博客 1059

平衡二叉树的判断

文章目录平衡二叉树的判断开门题问题思路实现树的高度平衡性的判断关于作者 平衡二叉树的判断 二叉树是比较常见的树,而且树的平衡具有非常重要的特性。如果一颗搜索二叉树的平衡性不是很好,那么搜索的效率就不会很高了。 开门题 前几天考研,今年人大计科的编程题就是判断一棵树是否为平衡二叉树。所以就先拿这个题热热身。 问题 既然要判断一棵树是否为平衡二叉树,那么久需要先理解什么是平衡树。 空树是一颗平衡树 ...

晴。 920
上一篇: 【软考】数据结构之5大排序(一)
下一篇: 桥接模式Bridge
xjCherie
博客等级 码龄14年 405粉丝 129原创
评论 25
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值