简单理解红黑树
在升级到JDK8之后,HashMap在列表个数大于8个时候,采用了红黑树来实现。面试的时候经常会问到我们一些红黑树的问题。那么我们首先要知道什么是红黑树。 红黑树性质定义 红黑树也是二叉查找树,我们知道二叉查找树的结构并不难,而红黑树就是难在它是自平衡的二叉树。它必须满足以下性质: 1.每个节点要么黑色要么红色。 2.根节点必需是黑色。 3.每个叶子节点(NIL)是黑色。 4.每个红色节点的两个子节点一定都是黑色。 5.任意一节点到每个叶子节点的路径都包含了数量相同的黑色节点。 我们知道在由随机数节点组成的二叉树的平均高度为logn,所以正常情况下二叉树查找的时间复杂度为O(logn)。但是,根据二叉树的特性,在最坏的情况下,比如存储的是一个有序的数据的话,那么所以的数据都会形成一条链,此时二叉树的深度为n,时间复杂度为O(n)。红黑树就是为了解决这个问题的,它能够保证在任何情况下树的深度都保持在logn左右。为什么这么说呢,我们由他的性质总结出一个隐含性质:从根节点到叶子节点的最长路径不大于最短路径的 2 倍。 红黑树的增加和删除 我们在将红黑树的增加和删除的时候首先要了解3种操作 1.变色:节点的颜色由红色变为黑色或者黑色变为红色。 2.左旋:以某个节点为旋转点,其右子节点变为旋转点的父节点。右子节点的左子节点变为旋转点的右子节点,旋转点的左子节点保持不变。如下图 3.右旋