数据结构之树(三)2-3-4树与红黑树

2-3-4树

1.前言
之所以介绍2-3-4树是因为2-3-4树与极为重要的红黑树有着等价关系,通过先学习2-3-4树为后面学习红黑树打下基础,增进对于红黑树的理解。

2-3树不再是单纯的二叉树了,因为2-3树中除了2-节点之外还存在3-节点。在2-3树的基础上进一步扩展,2-3-4树在2-3树的基础上添加4-节点。4-节点可以存储3个键值,最多可以拥有4棵子树。

2.定义
定义
(1)每个节点每个节点有1、2或3个key,分别称为2-节点,3-节点,4-节点。
(2)所有叶子节点到根节点的长度一致(也就是说叶子节点都在同一层)。
(3)每个节点的key从左到右保持了从小到大的顺序,两个key之间的子树中所有的 key一定大于它的父节点的左key,小于父节点的右key。

红黑树

1、引言
红黑树是树的数据结构中最为重要的一种。Java的容器TreeSet、TreeMap均使用红黑树实现。JDK1.8中HashMap中也加入了红黑树。C++ STL中的map和set同样使用红黑树实现。之前的文章已经详细介绍了2-3-4树的性质与操作。本篇文章将从2-3-4树与红黑树关系出发,详细阐明红黑树。
  2-3-4树和红黑树是完全等价的,但是2-3-4树的编程实现相对复杂,所以一般是通过实现红黑树来实现替代2-3-4树,而红黑树也同样保证在O(logN)的时间内完成查找、插入和删除操作。
2、定义
  红黑树是每个节点都带有颜色属性的平衡二叉查找树 ,颜色为红色或黑色。除了二叉查找树一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

(1)节点是要么红色或要么是黑色。
(2)根一定是黑色节点。
(3)每个叶子节点都带有两个空的黑色节点(称之为NIL节点,它又被称为黑哨兵)。
(4)每个红色节点的两个子节点都是黑色(或者说从每个叶子到根的所有路径上不能有两个连续的红色节点)。
(5)从任一节点到它所能到达得叶子节点的所有简单路径都包含相同数目的黑色节点。

3、性质
根节点到任意叶子节点的路径长度,最多相差一半。若树存在最短路径,则最短路径上均为黑色节点,那么第五条性质保证根节点到达最长路径与最短路径所包含的黑色节点数目相同,若最短路径长为N,则最长路径M=N+红色节点数目,性质4要求红色节点必定不连续,因此红色节点数目最多为N,则最长路径与最短路径最多相差N。
4、 2-3-4树和红黑树的等价关系
  如果一棵树满足红黑树,把红色节点收缩到其父节点,就变成了2-3-4树,所有红色节点都与其父节点构成3或4节点,其它节点为2节点。一颗红黑树对应唯一形态的2-3-4树,但是一颗2-3-4树可以对应多种形态的红黑树(主要是3节点可以对应两种不同的红黑树形态)。

参考:
https://xiaozhuanlan.com/topic/5036471892

你可能感兴趣的:(数据结构和算法)