(接上文《源码阅读(16):Java中主要的Map结构——HashMap容器(上)》)
3.2、HashMap准备知识:红黑树
红黑树又称自平衡二叉查找树,由于其稳定的查找特性,红黑树在Java中有广泛的应用——例如我们将要讲解的TreeMap容器和当前正在讲解的HashMap容器都有红黑树的具体应用。红黑树的操作原理相对于我们已经讲解过的堆树要复杂一些,但也并不是说无法理解,读者只需要跟随本节的介绍思路进行理解,并自行动手对其中提到的关键点进行验证,即可掌握红黑树的基本原理。
在网络上也有一些介绍红黑树的资料,但部分资料生涩难懂,甚至有一部分资料存在明显的错误,无法实现红黑树的构造还原。本文将通过图文结合的方式,介绍红黑树构造的本质。
3.2.1、二叉查找树(二叉搜索树)
要讲解红黑树,就必须首先介绍二叉查找树,因为红黑树是二叉查找树在极端情况下,稳定其时间复杂度的一种优化结构。所谓二叉查找树是指这样一颗树:
- 首先它是一颗二叉树
- 如果当前树的根结点存在左子树,则左子树上的任意结点的权值均小于当前根结点的权值
- 如果当前树的根节点存在右子树,则右子树上的任意结点的权值均大于当前根结点的权值
- 以此类推,以当前树上任何结点作为子树的根结点,则其左子树和右子树上的结点权值特点均满足以上第2点和第3点的描述
- 二叉查找树上的结点,没有权值相等的两个结点。
请注意二叉查找树的定义和我们之前文章已经介绍过的堆树定义的区别,简单来说前者的定义更严格。针对以上对二叉查找树的定义,以下的树结构都是二叉查找树: