MENU

【C++】木の回転を3行で書く


昔考えたやつをブログ化

//npはnodeのポインタ、b=1で右回転 ch[1]は右の子、ch[0]は左の子
np rot(np t,bool b){
    tie(t->ch[1-b]->ch[b],t->ch[1-b],t) = make_tuple(t,t->ch[1-b]->ch[b],t->ch[1-b]);
    if(t->ch[b])update(t->ch[b]);
    return update(t);
}

make_tupleとtieを使って簡潔にかけます
AVL木前提のコードなので、他の平衡二分木ならもうちょっとnullptrに対して厳密にやる必要があるかも
nullptr=hoge
という文を作っても今の所良い感じにignoreしてくれてます(c++の定義を知っているわけでは無いので知ってる方いれば教えて欲しいです)