关于Treap的旋转操作
查看原帖
关于Treap的旋转操作
68207
CreeperLordVader楼主2021/6/26 16:17

对于这个旋转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的儿子指针好像对树形态没有影响?

问题出在哪里?

2021/6/26 16:17
加载中...