对于这个旋转rotate函数
void rotate(int& o,int d)
{
int k=tr[o].ch[d];
tr[o].ch[d]=tr[k].ch[d^1];
tr[k].ch[d^1]=o;
maintain(o);
maintain(k);
o=k;
}
这个是正确的,但是有一点疑问
对于旋转前o的父亲p,它应该有个儿子指针指向o
旋转过程中改变了o的值,但代码中好像没有更新p的儿子指针(我觉得应该加一行让p的儿子指针更新为k,或者改变后的o),然而Treap还是能正常运作,也就是说不更新p的儿子指针好像对树形态没有影响?
问题出在哪里?