内容导航:
- 1、有了二叉树,平衡二叉树为什么还需要红黑树
- 2、红黑树和平衡二叉树 区别
- 3、红黑树与普通的平衡二叉树除了颜色到底有什么区别
- 4、二叉树,平衡二叉树,红黑树,特点
- 5、平衡二叉树是什么?
- 6、平衡二叉树与红黑树的对比
有了二叉树,平衡二叉树为什么还需要红黑树
红黑树是处于二叉树和平衡二叉树之间的一种折中方案的算法。说起来红黑树也算是比较难理解的一个数据结构了吧,因为其本身的增删节点,除了左旋右旋还需要变色的复杂操作。
为什么有平衡二叉树这种适合适合查找的数据结构在,还需要红黑树呢?还是先从二叉树说起。
二叉查找树的特点就是 左子树的节点值指喊带比父亲节点小,而右子树的节点值比父亲节点大。
二叉树的查询颇有 二分查找 的思想,如果查询一个节点,n 个节点的二叉查找树,正常的情况下,查找的时间复杂度为 O(logn)。为什么说是正常情况,因为上面的树其实不只是二叉树而且还是平衡二叉树。
那如果不正常的情况下,二叉树是啥样的呢?下面是一种退化为类似链表的二叉树的极端情况。这样的二叉查找树的查找时间复杂度顿时变成了 O(n),类似于在做全表扫描,为了避免这种情况的发生,平衡二叉树在这种情况下登场了。平衡二叉树除了具有二叉树的全部特性外,加了一个规则,就是每个节点的左子树和右子树的高度差至多等于1。
嗯,这样的话就不会出现一棵链表了。平衡二叉树基于这种特点就可以保证不会出现大量节点偏向于一边的情况了。这样平衡二叉树对于有 n 个节点的平衡树,最坏的查找时间复杂度也为 O(logn)。平衡二叉树通过 构建、插入、删除、左旋、右旋 等操作来达到平衡。
MySQL索引中 B树和B+树是基于平衡二叉树的进一步改进 。B+树索引按照存储方式的不同分为 聚集索引 和 非聚集索引。
二叉树的算法实现 其实就是要插入的节点都开始和根节点比,小的放节点左边大的右边,如果位置上已经有节点了就再迭代,把渗镇当前节点作为根节点来判断放左右,直到有空位置为止。
有了平衡二叉树这么优唯芦秀的结构为什么还需要红黑树,因为平衡二叉树要求 每个节点的左子树和右子树的高度差至多等于1 ,导致每次进行插入/删除节点的时候,几乎都会破坏平衡树规则,进而我们都需要通过 左旋 和 右旋 来进行调整,使之再次成为一颗符合要求的平衡树。如果频繁增删就会带来性能问题。所以红黑树出现了。
红黑树特性:
1、具有二叉查找树的特点。
2、根节点是黑色的;
3、 每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存数据 。
4、 任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的。
5、 每个节点,从该节点到达其可达的叶子节点是所有路径,都包含相同数目的黑色节点。(限制了高度)
下面是两棵红黑树的例子(黑色的空叶子节点没有画出):
上面的例子似乎有点平衡二叉树的味道,但它并不是必须满足平衡二叉树的深度差不超过1的条件,如下面的例子。
红黑树的这种特点,使得它能够在最坏情况下,也能在 O(logn) 的时间复杂度查找到某个节点。但与平衡树不同的是,红黑树在插入、删除等操作, 不会像平衡树那样,频繁着破坏红黑树的规则,所以不需要频繁着调整。 意思是查效率相当,但改效率高于平衡树,这也是我们为什么大多数情况下使用红黑树的原因。只不过据说单单在查找方面的效率的话,平衡树会比红黑树快点。
综上,可以说 红黑树是一种不大严格(没有深度差要求)的平衡树 。也可以说是一个折中方案。
那么红黑树如何进行左旋,右旋和变色来达到平衡呢 ?笔者也还没完全吃透,不过理解了上面的这些应该也够驰骋沙场了。
参考文献:
腾讯面试题:有了二叉查找树、平衡树为啥还需要红黑树?
红黑树旋转
红黑树和平衡二叉树 区别
红黑树和平衡二叉树的主要区别如下:
平衡二叉树(AVL)树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1)。不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,而的英文旋转非常耗时的。所以平衡二叉树(AVL)适合用于插入与删除次数比较少,但查找多的情况。
红黑树在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡,从而保证了红黑树的查找、插入、删除的时间复杂度最坏为O(log
n)。所以红黑树适用于搜索,插入,删除操作较多的情况。
扩展资料:
平衡二叉树在Windows
NT内核中广泛存在。
红黑树的应用:
1、在C
++的STL中,地图和集都是用红黑树实现的;
2、著皮孝明名的Linux的的进程调度完全公平调度程序,慎知用红黑树管理进程控制块,进程的虚拟内存区域都存储在一颗红黑树上,每个虚拟地址区域都对应红黑树的一个节点,左指针指向相邻的地址虚拟存储区域,右指针指向相邻的高地址虚拟地址空间;
3、IO多路复用的epoll的的的实现采用红黑树组织管理的sockfd,以支持快速的增删改查;
4、Nginx的的的中用红黑树管理定时器,因为红黑树是有序的,可以很快的得到距离当前最小的定时器;
5、Java中的TreeMap中的实现。
参考资料:
百度百科-平衡二叉树
百度百科-红黑树燃告
红黑树与普通的平衡二叉树除了颜色到底有什么区别
红黑树和之前掘空所讲的avl树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。自从红黑树出来后,avl树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。
红黑树和avl树的区别在于它使缓段用颜色来标识结点的高度,它所追求的是局部平衡而不是avl树中的非常严格的平衡。avl树的复杂比起红黑树来说简扰散誉直是小巫见大巫。红黑树是真正的变态级数据结构。
二叉树,平衡二叉树,红黑树,特点
二叉树binary tree是指每个节点最多含有两个子树的树结构。
特点:
1.所有节点最多拥有两个子节点,即度不大于2
2.左子树的键值小于根的键值,右子树的键值大于根的键值。
遍历
二叉树的遍历有三种方式 (简记:把根放哪)
(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。
(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。
(3)后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。迅卜
比如上图二叉树遍历结果
前序遍历:ABCDEFGHK
中序遍历:BDCAEHGKF
后序遍历:DCBHKGFEA
1.符合二叉树的条件下
2.任何节点的两个子树的高度最大差为1
如果在avl 树,中进行插入和删除节点操作,可能导致avl树失去平衡,那亩稿穗么可以通过旋转重新达到平衡。因此我们说的二叉树也称自平衡二叉树。
红黑树和avl树类似,都是在进行插入和删除操作时通过特定的操作保持二叉树的平衡,从而获得较高的查找性能。
特点:
1.节点是红色或黑色
2.根节点是黑色
3.叶子节点(nil,空节点)是黑色
4.每个红色节点的两个子敬脊节点都是黑色
平衡二叉树是什么?
什么是平衡二叉树
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一雹亩码棵平衡二叉树。常用算法有红黑树、AVL、Treap、伸展树等。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在紶耐如(log2n),大大降低了操作的时间复杂度。
什么是平衡二叉树
简单说就是平衡二叉排序树,也就是首先是二叉排序树,然后还是平衡的。可以这样理解
它要么是一 棵空树,要么是它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
什么是“理想平衡二叉树”
理想二叉树是一种特殊的满二叉树,其所有叶结点均在同一高度或者同一深度,也即一棵深度(高度)为h且有 2^h-1个结点的二叉树。
红黑树和平衡二叉树 区别
红黑树和之前所讲的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。
红黑树和AVL树的区别在于它使用颜色来标识结点的高度,它所追求的是局部平衡而不是AVL树中的非常严格的平衡。AVL树的复杂比起红黑树来说简直是小巫见大巫。红黑树是真正的变态级数据结构。
平衡二叉树比其他二叉树有什么好处
首先平衡二叉树是特殊的二叉排序树,他的结点元素间存在着偏序关系。
其次相对于一般的二叉排序树,平衡二叉树的左右子树的深度差也有不超过1层的约束。
这样使得平衡树是同种元素序列情况下的深度最小的二叉排序树。这可以减少二叉树元素查找的深度,从而提升平均查找效率。
平衡二叉树定义
所谓平衡二叉树是指树中任一结点的左、右子树高度大致相同。平衡二叉树有很多种绩著名的是由前苏联数学家Adelse—Velskil和Landis在1962年提出的,称为AVL树。平衡二叉树(AVL树)定义如下:平衡二叉树或者是一棵空树,或者是具有以下性质的二叉排序树:(1)它的左子树和右子树的高度之差绝对值不超过1;(2)它的左子树和右子树都是平衡二叉树。
平衡二叉树的平衡因子是什么
基本上就是左子树高了1层就加1,右子树高就-1,然后左右一样高就为0
平衡二叉树的介绍
平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。构造与调整方法 平衡二叉树的常用算法有红黑树、AVL、Treap等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列源哪,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
数据结构平衡二叉树图9.12中的(e)和(g)啥意思
这个e和g就是在平衡二叉树产生不平衡时,做了平衡化的旋转得到
数据结构中的平衡二叉树怎么理解
:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
常用算法有红黑树、AVL、Treap、伸展树等。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log(n)),大大降低了操作的时间复杂度
平衡二叉树与红黑树的对比
AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子树树高不超过1,和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1)。不管我们是执枣州行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,而的英文旋转非常耗时的,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况
一种蚂圆二叉查找树,但在每个节点增加一个存储位表示节点的颜色,闷岩塌可以是红或黑(非红即黑)。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树),相对于要求严格的AVL树来说,它的旋转次数少,所以对于搜索,插入,删除操作较多的情况下,我们就用红黑树。