procedure checkrots( var t : tree );
var wbal : real;
begin
with t^ do begin
wbal := wt(left) / weight;
if wbal > 0.707011 then
{*** left subtree too heavy: right rotation needed ***}
if wt(left^.left) / wt(left) > 0.414213 then rrot( t )
else begin lrot( left ); rrot( t ) end
else if wbal < 0.292893 then
{*** right subtree too heavy: left rotation needed ***}
if wt(right^.left) / wt(right) < 0.585786 then lrot( t )
else begin rrot( right ); lrot( t ) end
end
end;
|