标签:
treap:
(1)树+堆。具体是随机某个节点的值,然后维护这个值满足堆的性质。
(2)代码实现
sbt:
(1)陈大神的节点大小平衡树,其实就是根据四种情况进行调整,而这四种情况也是其他bst会使用的调整方式。中心思想就是当节点信息变时,用maintain调整
(2)代码实现
procedure maintain(var t:longint);
begin
if s[left[left[t]]]>s[right[t]] then begin //左左>右的情况:先右旋,当前根右节点变了,需要调整,然后根变了,需要调整。
rightrotate(t);
maintain(right[t]);
maintain(t);
exit;
end;
if s[right[left[t]]]>s[right[t]] then begin //左右>右的情况:先左旋左儿子,使左右变成左儿子,再左旋,让左儿子变成根,至此,当前根的左儿子要调整,当前根的右儿子也要调整,当前根也要调整
leftrotate(left[t]);
rightrotate(t);
maintain(left[t]);
maintain(right[t]);
maintain(t);
exit;
end;
if s[right[right[t]]]>s[left[t]] then begin
leftrotate(t);
maintain(left[t]);
maintain(t);
exit;
end;
if s[left[right[t]]]>s[left[t]] then begin
rightrotate(right[t]);
leftrotate(t);
maintain(left[t]);
maintain(right[t]);
maintain(t);
end;
end;
标签:
原文地址:http://www.cnblogs.com/Macaulish/p/4290931.html