試してないのでわからないのですが
— 5%の確率で橙パフォをとるhotman (@hotmanww) October 30, 2019
tie(t->r,t->r->l,t)=make_tuple(t->r->l,t,t->r);
で木の回転が出来そう?
昔考えたやつをブログ化
//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++の定義を知っているわけでは無いので知ってる方いれば教えて欲しいです)