添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

一,AVL树(平衡二叉树)

(1)简介

AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子树树高不超过1,和红黑树相比,AVL树是 严格的平衡二叉树 ,平衡条件必须满足( 所有节点的左右子树高度差的绝对值不超过 1 )。不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,而旋转是非常 耗时 的,由此我们可以知道 AVL树适合用于插入与删除次数比较少,但查找多的情况

(2)局限性

由于维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应用不多,更多的地方是用追求局部而不是非常严格整体平衡的红黑树。当然, 如果应用场景中对插入删除不频繁,只是对查找要求较高,那么AVL还是较优于红黑树。

(3)应用

1,Windows NT内核中广泛存在;

二、红黑树


(1)简介

一种二叉查找树,但在每个节点增加一个存储位表示节点的颜色,可以是红或黑( 非红即黑 )。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制, 红黑树确保没有一条路径会比 其它路径长出两倍 ,因此,红黑树是一种 平衡二叉树 (由于是弱平衡,可以看到, 相同的节点情况下,AVL树的高度低于红黑树) ,相对于要求严格的AVL树来说,它的旋转次数少,所以 对于搜索,插入,删除操作较多的情况下,我们就用红黑树

(2)性质

如图1所示,每个节点非红即黑;


1. 每个节点非红即黑
2. 根节点是黑的;
3. 每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的;
4. 如图所示,如果一个节点是红的,那么它的两儿子都是黑的;
5. 对于任意节点而言,其到叶子点树NULL指针的每条路径都包含相同数目的黑节点;

6. 每条路径都包含相同的黑节点;

(3)应用

1,广泛用于C ++的STL中,地图和集都是用红黑树实现的;

2,着名的Linux的的进程调度完全公平调度程序,用红黑树管理进程控制块,进程的虚拟内存区域都存储在一颗红黑树上,每个虚拟地址区域都对应红黑树的一个节点,左指针指向相邻的地址虚拟存储区域,右指针指向相邻的高地址虚拟地址空间;

3,IO多路复用的epoll的的的实现采用红黑树组织管理的的的sockfd,以支持快速的增删改查;

4,Nginx的的的中用红黑树管理定时器,因为红黑树是有序的,可以很快的得到距离当前最小的定时器;

5,Java的的的中TreeMap中的中的实现;

数据结构属于理解一些源码和技术所必备的知识,比如要读懂 Java 语言中 TreeMap 和 TreeSet 的源码就要懂 红黑 的数据结构,不然是无法理解源码中关于 红黑 数据的操作代码的,比如左旋、右旋、添加和删除操作等。因此本课时我们就来学习一下数据结构的基础知识,方便看懂源码或者是防止面试中被问到。 我们本课时的面试题是, 红黑 二叉树 有什么 区别 ? 要回答这个问题之前,我们先要弄清什么是 二叉树 ?什么是 红黑 二叉树 (Binary Tree)是指每个节点最多只有两个分支的 结构,即不存在
今天看了STL源码剖析中关于 红黑 的原理和实现,看完复杂的节点插入、节点颜色变换后不禁想:这些功能经典的 AVL 也能实现,为什么要提出 红黑 ?查了些资料,并且加上自己理解,感叹 红黑 的巧妙。 首先 红黑 是不符合 AVL 平衡 条件的,即每个节点的左子 和右子 的高度最多差1的二叉查找 。但是提出了为节点增加颜色, 红黑 是用非严格的 平衡 来换取增删节点时候旋转次数的降低,任何不 平衡 都会在三次旋转之内解决
红黑 初解 今天来复习一下 红黑 的知识点,推荐51CTO这个微信公众号。 学过数据结构都知道 二叉树 的概念,而又有多种比较常见的 二叉树 类型,比如完全 二叉树 、满 二叉树 、二叉搜索 、均衡 二叉树 、完美 二叉树 等。 今天我们要说的 红黑 就是就是一棵非严格均衡的 二叉树 ,均衡 二叉树 又是在二叉搜索 的基础上增加了自动维持 平衡 的性质,插入、搜索、删除的效率都比较高。 红黑 也是实现 TreeMap 存储结构的基石。 红黑 根据节点颜色(同一双亲节点出发到哨兵节点,所有路径上的黑色节点数目一样),一些约定和旋转实现; AVL 根据 平衡 因子(所有节点的左右子 高度差的绝对值不超过1)和旋转决定 2、 红黑 的插入效率更高!!! 红黑 是用非严格的 平衡 来换取增删节点时候旋转次数的降低,任何不 平衡 都会在三次旋转之内解决, 红黑 并不追求“完全 平衡 ”,它只要求部分地达到 平衡 要求,降低...
二叉查找 ,也称二叉搜索 ,或二叉排序 。其定义也比较简单,要么是一颗空 ,要么就是具有如下性质的 二叉树 : (1)若任意节点的左子 不空,则左子 上所有结点的值均小于它的根结点的值; (2) 若任意节点的右子 不空,则右子 上所有结点的值均大于它的根结点的值; (3) 任意节点的左、右子 也分别为二叉查找 ; (4) 没有键值相等的节点。   如上图所示,是不同形态...
资源名称:SQLServer中临时表与表变量的 区别 内容简介:       本文档主要讲述的是SQLServer中临时表与表变量的 区别 ;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看。资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。 RB-Tree和 AVL 作为BBST,其实现的算法时间复杂度相同, AVL 作为最先提出的BBST,貌似RB-tree实现的功能都可以用 AVL 是代替,那么为什么还需要引入RB-Tree呢? 红黑 不追求"完全平...
如果说 平衡 二叉树 是一个类的话,那么 红黑 就是该类的一个实例。 算法的书我丢久了,一下子也找不到,我是凭记忆说的。 红黑 的算法比较麻烦,但它的思想很好,如果理解了它的思想也就理解它的算法,我也只记得思想,具体算法记不得了。我就在这说说思想吧。 红黑 有两个重要性质: 1、红节点的孩子节点不能是红节点; 2、从根到前端节点的任意一条路径上的黑节点数目一样多。 这两条性质确保该 的高度为l