procedure insert( key : typekey; var t : tree );
begin
if t = nil then begin
        t := NewNode( key, nil, nil );
        t^.weight := 2
        end
else if t^.k = key then
        Error {*** Key already in table ***}
else with t^ do begin
    if k < key then insert( key, right )
               else insert( key, left );
    weight := wt( left ) + wt( right );
    checkrots( t )
    end
end;
