红黑树

定义

红黑树是一棵二叉搜索树,在其每个节点上增加了一个属性表示节点的颜色,对任意一条从根到叶子的简单路径上各节点颜色的约束,使得红黑树不存在一条路径比其它路径长出两倍。

黑高:该节点到叶节点路劲下黑色节点的个数,不包括该节点本身

性质

  1. 每个节点是红色或者是黑色
  2. 根节点是黑色
  3. 每个叶节点(NIL)是黑色
  4. 如果一个节点是红色的,则它的两个子节点都是黑色的
  5. 对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点

[注] 这里所谓的叶节点指的是正常的叶节点下的节点,为NIL,属性为黑色,也就是说正常的叶节点的黑高一定是1

定理证明

一棵有n个内部节点的红黑树的高度至多为2lg(n+1)
先说明一下定义:
叶子结点:前面有讲到,指的是NIL
内部节点:排除NIL后的节点,即x为根的内部节点是包括x的
先证明任一节点x为根的子树中至少包含2^bh(x)-1个内部节点
使用归纳法可证
当bh(x)=0时,表示x为叶节点,x没有子树,成立
对一个有左右子树的x节点分析,其左右子树的黑高为bh(x)或者是bh(x-1) 【这里我不知道为什么要分析既有左子树又有右子树的情况】
假设以x的子节点为根的子树中至少包含2^bh(x-1)-1个内部节点成立,对于x而言,其包含的节点数为(2^bh(x-1)-1)+(2^bh(x-1)-1)+1=2^bh(x)-1,得证。
继续分析,上面证明中bh(x)表示的是黑高,由性质4可以得出,从x到叶子节点的路径上至少有一半的黑色节点,因此对于以x为根节点高度为h的树一定有:bh(x)>=h/2
假设以x为根的树有n个节点,可得n>=2^bh(x)-1,有n>=2^(h/2)-1
即h<=2lg(n+1),证明原命题

旋转

旋转分为左旋和右旋,旋转时按照二叉树的性质来安排节点的位置,旋转的意义在于改变了节点的黑高

左旋

如果觉得有帮助,给我打赏吧!