深入了解红黑树
红黑树的定义:
R-B Tree,全称是 Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。
红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL 或 NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
红黑树的应用:
主要是用它来存储有序的数据,它的时间复杂度是 O(lgn),效率非常之高。
例如,Java 集合中的TreeSet和TreeMap,C++ STL 中的 set、map,以及 Linux 虚拟内存的管理,都是通过红黑树去实现的。
红黑树的基本操作
红黑树的基本操作是添加、删除,在对红黑树进行添加或删除之后,都会用到旋转方法。为什么呢?道理很简单,添加或删除红黑树中的节点之后,红黑树就发生了变化,可能不满足红黑树的 5 条性质,也就不再是一颗红黑树了,而是一颗普通的树。而通过旋转,可以使这颗树重新成为红黑树。简单点说,旋转的目的是让树保持红黑树的特性。
旋转包括两种:左旋 和 右旋
左旋
![](https://static001.geekbang.org/infoq/de/deb911c6d4232b65cbbac93d4c900edb.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
对 x 进行左旋,意味着"将 x 变成一个左节点"。
右旋
![](https://static001.geekbang.org/infoq/14/144c5dd5dc6680b1f1cf4245ab283fc0.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
对 x 进行左旋,意味着"将 x 变成一个左节点"。
评论