[Home]
[Chapter]
[Contents]
[Previous Algorithm]
[Next Algorithm]


Weight balanced tree deletion


procedure delete( key : typekey; var t : tree ); begin if t = nil then Error {*** key not found ***} else begin {*** search for key to be deleted ***} if t^.k < key then delete( key, t^.right ) else if t^.k > key then delete( key, t^.left ) {*** key found, delete if a descendant is nil ***} else if t^.left = nil then t := t^.right else if t^.right = nil then t := t^.left {*** no descendant is null, rotate on heavier side ***} else if wt( t^.left ) > wt( t^.right ) then begin rrot( t ); delete( key, t^.right ) end else begin lrot( t ); delete( key, t^.left ) end; {*** reconstruct weight information ***} if t <> nil then begin t^.weight := wt( t^.left ) + wt( t^.right ); checkrots( t ) end end end;

C source (3414.del.c) Pascal source (3414.del.p)



© Addison-Wesley Publishing Co. Inc.