平衡树和二叉树的区别
欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。
一、平衡二叉树(AVL树)
1、概念
AVL
树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子树树高不超过1
,和红黑树相比,AVL
树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1
)。不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡
,而旋转非常耗时的,由此我们可以知道AVL
树适合用于插入与删除次数比较少,但查找多
的情况。
2、局限性
由于维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应用不多,更多的地方是用追求局部而不是非常严格整体平衡的红黑树。当然,如果应用场景中对插入删除不频繁,只是对查找要求较高,那么AVL
还是较优于红黑树。
3、应用
Windows NT
内核中广泛存在。
二、红黑树
1、概念
一种二叉查找树,但在每个节点增加一个存储位表示节点的颜色,可以是红或黑(非红即黑
)。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树
),相对于要求严格的AVL
树来说,它的旋转次数少
,所以对于搜索,插入,删除操作较多
的情况下,我们就用红黑树
。
2、性质
- 每个节点非红即黑
- 根节点是黑的
- 每个叶节点(叶节点即树尾端
NULL
指针或NULL
节点)都是黑的 - 如图所示,如果一个节点是红的,那么它的两儿子都是黑的
- 对于任意节点而言,其到叶子点树
NULL
指针的每条路径都包含相同数目的黑节点 - 每条路径都包含相同的黑节点
3、应用
- 广泛用于
C ++
的STL
中,地图和集都是用红黑树实现的 - 著名的
Linux
的的进程调度完全公平调度程序,用红黑树管理进程控制块,进程的虚拟内存区域都存储在一颗红黑树上,每个虚拟地址区域都对应红黑树的一个节点,左指针指向相邻的地址虚拟存储区域,右指针指向相邻的高地址虚拟地址空间 IO
多路复用的epoll
的的实现采用红黑树组织管理的的的sockfd
,以支持快速的增删改查Nginx
的的的中用红黑树管理定时器,因为红黑树是有序的,可以很快的得到距离当前最小的定时器Java
的的的中TreeMap
中的实现
平衡树和二叉树的区别相关推荐
- 完全二叉树和满二叉树的区别
完全二叉树和满二叉树的区别如下: 1.完全二叉树是深度为k,有n个结点的二叉树,当且仅当其每一个结点,都与深度为k的满二叉树中编号从1至n的结点逐一对应的二叉树: 2.完全二叉树的叶子结点只可能在层次 ...
- 完全二叉树与满二叉树的区别+计算二叉树深度
1.完全二叉树与满二叉树的区别: 满二叉树:深度为k且有2^k-1个结点的二叉树称为满二叉树. 完全二叉树:设二叉树的深度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第 ...
- 二叉平衡树之二叉树搜索树【咱们一起手动模拟实现】
目录 1.什么是二叉搜索树? 2.手动模拟二叉搜索树 2.1.整体代码 2.2.查找数据 2.3.插入数据 2.4.删除数据 3.性能分析 1.什么是二叉搜索树? 二叉搜索树也叫作二叉排序树,可以使一 ...
- 完全二叉树与满二叉树的区别(有图)
先看图: 完全二叉树:设二叉树的深度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数, 第 h 层所有的结点都连续集中在最左边 满二叉树:深度为k且有2^k-1个结点的二叉树称为 ...
- 完全二叉树 和 满二叉树的区别
完全二叉树 叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树.如下图 完全二叉树的特点是: 1)只允许最后一层有空缺结点且空缺在右边,即叶子结点只能在层次最大的 ...
- Premiere Pro 2020 (v14.0.4.18) 绿色特别版
Adobe Premiere Pro 简称"PR",是一款专业的视频编辑软件,数字视频剪辑软件.主要用来编辑视频和音频,可以在RGB和YUV色彩空间中以高达32位色彩的视频分辨率对 ...
- 二叉树、B树、B+树、红黑树 的 本质区别以及各个应用场景
文章目录 我们先来看一个场景,然后再看下面的定义,以便深刻理解和记忆 二叉树 B树 B+树 红黑树 我们先来看一个场景,然后再看下面的定义,以便深刻理解和记忆 https://blog.csdn.ne ...
- 二叉树--二叉平衡树
二叉平衡树是二叉树中最为最要的概念之一,也是在语言库或者项目中应用比较广泛的一种特殊的树形结构. 二叉平衡树 AVL树是高度平衡的而二叉树.它的特点是:AVL树中任何节点的两个子树的高度最大差别为1. ...
- 关于双向链表和二叉树链表的区别
双向链表和二叉树链表区别为:节点指针数量不同.访问方向权限不同.节点存储内容不同.双向链表和二叉树链表都能从链表中的任何一个结点出发能找到任何其他结点.都用来存放线性数组中的数据元素. 一.节点指针数 ...
最新文章
- python读取文件一行-Python逐行读取文件内容
- 006 技能数组分析和代码编写
- 11gR2 RAC GoldenGate的HA配置
- android 获取ListView内部Item高度
- Netty 高性能架构设计
- mybatis 三级缓存查询循序_MyBatis手把手跟我做系列(五) --- 一级缓存与二级缓存
- 【图像增强】基于matlab GUI暗通道+Retinex图像去雾(带面板)【含Matlab源码 732期】
- 部署kubernetes
- c++ 循环控制语句 while语句 do...while语句 for语句 for循环
- Java注解:@IntDef 替换 Emum
- 高版本SDK编译生成的apk放入低版本android源码中集成编译
- 怎样删除wps文档计算机信息,文本框删除,wps怎么删除文本框
- 数据库数据误删除恢复
- BN层的running_mean更新机制
- CentOS,Ubuntu,Linux下安装yasm-1.3.0详细说明
- Linux服务器集群部署
- 麦克风产品 麦克风元器件 市场调研
- 北航计算机是啥水平,清华眼中的北航是什么水平?附北航2020年全国录取分数线...
- hazelcast java_Hazelcast: Java分布式内存网格框架(平台)
- 整了半天终于把五笔整出来了
热门文章
- Caused by: org.apache.dubbo.remoting.RemotingException: message can not send, because channel is
- vue图片裁剪组件_使用Vue-Rx的Vue.js图像裁剪组件
- 【RabbitMQ】基础二:工作队列模式(Work queues)
- MySQL数据库设置性别_数据库性别设置为男女
- C语言——男女cp配对的小软件
- 物联网卡注册NB-iot网络过程
- 深度Linux下Eclipse (for PHP)及xampp安装
- 国开电大 传感器与测试技术 形考任务
- lisp将图元追加选择_晓东CAD家园-论坛-A/VLISP-向块添加新图元,添加图元到块内 - Powered by Discuz!...
- 【精益创业入门】什么是精益创业?