树-红黑树(R-B Tree)
红黑树概念 特殊的二叉查找树,每个节点上都有存储位表示节点的颜色是红(Red)或黑(Black)。时间复杂度是O(lgn),效率高。 特性: (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。(只为空(NIL或null)的节点) (4)如果一个节点是红色的,则它的子节点必须是黑色的。(黑结点可连续,红结点不能连续) (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。 定理: 一棵含有n个节点的红黑树的高度至多为2log(n+1) . 证明:数学归纳法证明其逆否命题“高度为h的红黑树至少有2^(h/2 )-1个结点” 黑结点高度bh(x) >= h/2, 所以证明 “高度为h的红黑树至少有2^bh(x)-1个黑结点” 红黑树的旋转 左旋 左旋中的“左”,意味着“被旋转的节点将变成一个左节点” 。 LEFT-ROTATE(T, x) y ← right[x] // 前提:这里假设x的右孩子为y。下面开始正式操作 right[x] ← left[y] // 将 “y的左孩子” 设为 “x的右孩子”,即 将β设为x的右孩子 p[left[y]] ← x // 将 “x” 设为 “y的左孩子的父亲”,即 将β的父亲设为x p[y] ← p[x] // 将 “x的父亲” 设为 “y的父亲” if p[x] = nil[T]