关于红黑树的理解

前言

    关于红黑树,他其实是二叉查找树的一种晋级,我们都知道一点,二叉查找树是有缺陷的,是可能会出现线性查找这种性能低下的情况发生的,那么红黑树本质上就是一种自平衡二叉查找树,他的查找最长路径最大不超过最短路径的2倍,原因是在于红黑树本身的规则决定的,事实上由于红黑树优良的性能,JDK1.8中的hashmap就用到了红黑树这样的数据结构。

红黑树的规则

    上文也说了,红黑树是个自平衡的二叉查找树,那么这种数据结构是如何实现的呢?这里就要去了解一下红黑树的五个特性:
1、节点是红色或黑色(红黑树嘛)(笑)
2、根节点都是红色(相对的)
3、每个叶子的节点都是黑色的空节点(nill)(重要)
4、每个红色节点的两个节点都是黑色的(重要)
5、从任意节点到其每个叶子的所有路径都包含相同的黑色节点(核心)
    上文的括号里面的字是博主自己的见解,各位看官见仁见智。那么前三条我们就不再多加阐述,甚至第四条也一样,博主在学习的时候第五条性质着实迷了一阵,简单用大白话来讲就是,红黑树中的根节点到任意子节点的 黑色节点数目要一致,前面四个定义好理解,那么第五个定义该如何理解呢?第五个定义又名黑高,因为前四个定义的特点,我们可以知道一个红黑树所拥有的节点就是他的最短路径的长度,我们记为N,那么这个第五个定义,也就定义了一件事情,那就是最长的长度最多不能超过2N ,这样就保持了红黑树的自平衡二叉查找树的特性,规避了出现单腿过长的情况发生,大大提高了查找性能。
当然我们也可以反着来推,如果一个红黑树的黑高是h,那么这个红黑树的高度,至多是2h-1。同样的,若红黑树的高为h,那么黑高至少为h/2,且红高树内顶点个数n一定大于等于2的h/2-1次幂。
以上是结构,那么我们来看一下,这个插入删除操作是如何处理的
插入,需要两步操作,变色和旋转(左旋转和右旋转,左是柚子,右是左子)
关于旋转来说一下,我看了一些博客 和大神们的分析,我先用自己的话来说,先从插入节点是红的,黑的来说吧,首先我们要了解这个红黑树的第5个性质(黑高),这个性质决定了这个要插入的节点的颜色,插入的节点需要是红色节点才可以.

待续(不发表出去的话,我草稿箱都满了(笑))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章