红黑树原理分析(图解) 一.为什么要有红黑树这种数据结构? 学过二叉查找树的同学都知道,普通的二叉查找树在极端情况下可退化成链表,此时的增删查O(n)效率都会比较低下。为了避免这种情况,就出现了一些自平衡的查找树,比如 AVL。 AVL树是一种严格按照定义来实现的平衡二叉查找树,所以它查找的效率非常稳定,为O(log n),由于其严格按照左右子树高度差不大于1的规则,插入和删除操作中需要大量且复杂的操作来保持AVL树的平衡(左旋和右旋),因此AVL树适用于大量查询,少量插入和删除的场景中。 现在假设有这样一种场景:大量查询,插入和删除,使用AVL树就不太合适了,因为AVL树大量的插入和删除会非常耗时间,那么我们是否可以降低AVL树对平衡性的要求从而达到快速的插入和删除呢? 答案肯定是有的,红黑树这种数据结构就应运而生了(因为AVL树是高度平衡的,所以查找起来肯定比红黑树快,但是红黑树在插入和删除方面的性能就远远不是AVL树所能比的了)。 二.红黑树的性质 红黑树通过如下的性质定义实现自平衡: 1.节点是红色或黑色。 2.根是黑色。 3.所有叶子都是黑色(叶子是NIL节点)。 4.每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。) 5.从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点(简称黑高)。 有了上面的几个性质作为限制,即可避免二叉查找树退化成单链表的情况。但是,仅仅避免这种情况还不够,这里还要考虑某个节点到其每个叶子节点路径长度的问题。如果某些路径长度过长,那么,在对这些路径上的节点进行增删查操作时,效率也会大大降低。这个时候性质4和性质5用途就凸显了,有了这两个性质作为约束,即可保证任意节点到其每个叶子节点路径最长不会超过最短路径的2倍。 当某条路径最短时,这条路径必然都是由黑色节点构成。当某条路径长度最长时,这条路径必然是由红色和黑色节点相间构成(性质4限定了不能出现两个连续的红色节点)。而性质5又限定了从任一节点到其每个叶子节点的所有路径必须包含相同数量的黑色节点。此时,在路径最长的情况下,路径上红色节点数量 = 黑色节点数量。该路径长度为两倍黑色节点数量,也就是最短路径长度的2倍。举例说明一下,请看下图: 




















2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/51741.html