掌握好数据结构是咱们学习算法的基础。例如基本的数组、链表、二叉树、堆、栈到复杂的图等等。今天咱们就来分析一下红黑树是一种怎么样的结构。程序员
红黑树是一种自平衡二叉查找树。这里涉及到了几个概念:平衡、二叉、查找。
二叉树:由不一样的节点组成,每个节点有左子节点和右子节点,一个节点最多两个子节点,这种就叫二叉树。
例如:
二叉查找树:上图的二叉树是普通的二叉树,有时候咱们但愿二叉树能具备一些功能便于咱们查询节点,这时候就有了二叉查找树,也叫二叉搜索树。二叉查找树的原理是左子节点(包括其子节点)的值小于(可能等于,看使用需求)当前节点,右子节点(包括其子节点)大于当前节点。并且这个原理对每一个子节点都适用。这样咱们查询的速度就从O(n)变成了O(logn)。
例如:
这样看起来挺美好,可是考虑极端状况呢?例如:
这个样子的树是二叉搜索树吗?是,可是看起来特别不平衡,数据所有堆积在左边,并且最重要的是,这样会致使查询速度从O(logn)退化成了O(n)。
所以,后面又发明了自平衡二叉查找树,有好几种,AVL、红黑树等,其中性能比较好的就是红黑树。Java中的TreeMap结构就使用了这个数据结构,不只如此,在JDK1.8中HashMap单数组上链表长度超过8便会变成红黑树,来节省map在哈希冲突严重时的查询时间。因而可知红黑树的重要性。算法