重学数据结构(六、树和二叉树) (9)

红黑树是一种常见的自平衡二叉查找树,常用于关联数组、字典,在各种语言的底层实现中被广泛应用,Java 的 TreeMap 和 TreeSet 就是基于红黑树实现的。


5.2.1、红黑树的定义和性质

红黑树::红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,称之为"对称二叉B树",它现在的名字来自Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中。

红黑树是具有如下性质的二叉查找树:

(1)每个节点是黑色或者红色

(2)根节点是黑色。

(3)每个叶子节点是黑色。

(4)从任意一个节点到叶子节点,所经过的黑色节点数目必须相等

(5) 空节点被认为是黑色的


图29:红黑树示例图

在这里插入图片描述



5.2.2、红黑树的平衡调整方法

作为一种平衡二叉树,红黑树的自平衡调整方法和AVL类似。关键也是在旋转。旋转同样也是左旋和右旋。找到了两个左旋和右旋的动图。

在这里插入图片描述

在这里插入图片描述

和AVL树不同的是,红黑树还有颜色性质,所以还会进行变色来平衡红黑树。


5.2.2、红黑树的插入

红黑树的插入和AVL树类似,同样是插入节点后需要对二叉树的平衡性进行修复。

新插入的节点是红色的,插入修复操作如果遇到父节点的颜色为黑则修复操作结束。也就是说,只有在父节点为红色节点的时候是需要插入修复操作的。

插入修复操作分为以下的三种情况,而且新插入的节点的父节点都是红色的:

叔叔节点也为红色。

叔叔节点为空,且祖父节点、父节点和新节点处于一条斜线上。

叔叔节点为空,且祖父节点、父节点和新节点不处于一条斜线上。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxzyd.html