【笔记】
红黑树中每个结点包含五个域:color,key,left,right和p。
如果某结点没有一个子结点或父结点,则该域指向NIL。
我们把NIL视为二叉树的外结点(叶子),而带关键字的结点视为内结点。
一棵二叉树如果满足下面的红黑性质,则为一棵红黑树:
1) 每个结点或是红的,或是黑的。
2) 根结点是黑的。
3) 每个叶结点(NIL)是黑的。
4) 如果一个结点是红的,则它的两个儿子都是黑的。
5) 对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。
采用哨兵来代表NIL,它的color域为BLACK,其它域为任意值。
从某个结点x出发(不包括该结点)到达一个叶结点的任意一条路径上,黑色结点的个数称为该结点x的黑高度,用bh(x)表示。
引理:一颗有n个内结点的红黑树的高度至多为2lg(n+1)。
动态集合操作SEARCH、MINIMUM、MAXIMUM、SUCCESSOR和PREDECESSOR可用红黑树在O(lgn)时间内实现,因为这些操作在一棵高度为h的二叉查找树上的运行时间为O(h),而包含n个结点的红黑树又是高度为O(lgn)的查找树。
【练习】
13.1-1 画出在关键字集合{1,2,...,15}上高度为3的完全二叉查找树。以三种不同方式,向图中加入NIL叶结点并对各结点着色,是所得的红黑树的黑高度分别为2,3和4。
13.1-2 画图出调用TREE-INSERT插入关键字36后的结果。如果插入的结点被标为红色,所得的树是否还是一棵红黑树?如果该节点被标为黑色呢?
黑:不满足性质5)
红:不满足性质4)
13.1-3 定义松弛红黑树为满足红黑性质1,3,4和5的二叉查找树。换言之,根部可以是红色或是黑色。考虑一棵根是红色的松弛红黑树T。如果将T的根部标为黑色而其他都不变,则所得到的是否还是一颗红黑树?
根部标为黑色,满足了性质2),没有破坏性质4),从根结点到子孙结点上的黑结点数不变性质5)不变。
因此还是一颗红黑树。
13.1-4 假设将一颗红黑树的每一个红结点吸收到它的黑色父结点中,来让红结点的子女变成黑色父结点的子女。当一个黑结点的所有红色子女都被吸收后,其可能的度是多少?此结果树的叶子深度怎样?
不吸收:度为2
吸收一个:度可能为3
吸收两个:度可能为4
叶子深度为红黑树黑高度。
13.1-5 证明:在一棵红黑树中,从某结点x到其后代叶结点的所有简单路径中,最长的一条是最短一条的至多两倍。
设最短路径为k个黑结点:●●●●
由性质4没有连续两个红结点,性质5路径上黑结点数目相同,则最长路径:○●○●○●○●
因此最长的一条是最短一条的至多两倍。
13.1-6 在一棵高度为k的红黑树中,内结点最多可能有多少个?最少可能有多少个?
易知,最多可能有2^2k-1
最少可能有2^k-1
13.1-7 请描述出一棵在n个关键字上构造出来的红黑树,使其中红的内结点数与黑的内结点数的比值最大。这个比值是多少?具有最小可能比例的树又是怎样?此比值是多少?
黑红黑红交替。2:1。
全黑最小。0