Java数据结构

红黑树

Posted by Chen Xingxu on April 26, 2020

Java数据结构之红黑树

红黑树的特点:

  1. 每个结点不是红的就是黑的;
  2. 根结点总是黑色的;
  3. 每个叶子结点都是黑色的空结点(NIL结点);
  4. 如果结点是红色的,则它的叶子结点必须是黑色的(反之不一定),即从每个叶子到根的所有路径上不能有两个连续的红色结点;
  5. 从根结点到叶子结点或空结点的每条路径,必须包含相同数目的黑色结点(即相同的黑色高度);

红黑树的应用:

TreeMap、TreeSet 以及 JDK 1.8 的 HashMap 底层都用到了红黑树。

为什么要用红黑树?

简单来说就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。

二叉查找树(BST)具备什么特性呢?

  1. 子树上所有结点的值均小于或等于他的根结点的值;
  2. 子树上所有节点的值均大于或等于他的根节点的值;
  3. 左、右子树也分别为二叉排序树。