要理解红黑树就要先理解二叉查找树
二叉查找树特征:
1.左子树上所有结点的值均小于或等于它的根结点的值。
2.右子树上所有结点的值均大于或等于它的根结点的值。
3.左、右子树也分别为二叉排序树。
二叉查找树的优点:查找所需数的最大次数为等同于二叉查找树的高度。插入的时候也是类似,通过一层层比较大小,找到适合插入的位置。
二叉查找树的缺点:
如图,原始只有三个点,当插入5,6,7之后就会导致查找的性能降低,几乎变成线性
而红黑树正是为了解决二叉查找树多次插入新节点而导致的不平衡
红黑树:是一种自平衡的二叉查找树。除了符合二叉查找树的基本特征外还有如下特性。(红黑树从根到叶子的最长路径不超过最短路径的两倍)
1.节点是红色或黑色。
2.根节点是黑色。(记)
3.每个叶子节点都是黑色的空节点。(记)
4 每个红色节点的两个子节点都是黑色。(就是不能有连续的红色)(记)
5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。(记)
下图中这棵树,就是一颗典型的红黑树:
红黑树的特性和优势,及在什么情况下需要变色什么情况下需要旋转
面试问题:
一.红黑树有哪些性质?
1.节点是红色或黑色。
2.根节点是黑色。
3.每个叶子节点都是黑色的空节点。
4 每个红色节点的两个子节点都是黑色。(就是不能有连续的红色)
5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
2.红黑树的各种操作的时间复杂度是多少?
能保证在最坏情况下,基本的动态几何操作的时间均为O(lgn)
3.红黑树的应用:
应用有很多,jdk的集合类TreeMap和TreeSet底层就是红黑树实现的。Jdk8中HashMap也用到了红黑树。
想要理解清楚:https://segmentfault.com/a/1190000014037447?utm_source=tag-newest