红黑树——定义及接口

由红、黑两类节点组成的BST //亦可给边染色

(统一增设外部节点NULL,使之成为真二叉树)

1)树根:必为黑色

2)外部节点:均为黑色

3)其余节点:若为红,则只能有黑孩子 //红之子、之父必黑

4)外部节点到根:途中黑节点数目相等 //黑深度


(2,4)树==红黑树

提升各红节点,使之与其(黑)父亲等高——于是每棵红黑树都对应于一颗(2,4)-树

将黑节点与其红孩子视作(关键码并合并为)超级节点

无非四种组合,分别对应于4阶B-树的一类内部节点

接口定义:

template class RedBlack:public BST {

public:    //BST::search()等其余接口可直接沿用

              BinNodePosi(T) insert (const T & e); //重写插入

              bool remove(const T & e); //重写删除

protected:    void solveDoubleRed(BinNodePosi(T) x); //双红修正

              void solve Double Black(BinNodePosi(T) x); //双黑修正

              int updateHeight(BinNodePosi(T) x); //更新节点x的高度

};

template int RedBlack::updateHeight(BinNodePosi(T) x) {

x->height = max(stature(x->lc),stature(x->rc));

if(IsBlack(x)) x->height++; return x->height; //只计黑节点

}

你可能感兴趣的:(红黑树——定义及接口)