[prev] 37 [next]

Deletion from BSTs (cont)

Pseudocode (with version 2 for case 4)

TreeDelete(t,item):
|  Input  tree t, item
|  Output t with item deleted
|
|  if t is not empty then          // nothing to do for case 1
|  |  if item < data(t) then       // delete item in left subtree
|  |     left(t)=TreeDelete(left(t),item)
|  |  else if item > data(t) then  // delete item in right subtree
|  |     right(t)=TreeDelete(right(t),item)
|  |  else                         // node 't' must be deleted
|  |  |  if left(t) and right(t) are empty then 
|  |  |     new=empty tree                   // case 2: 0 children
|  |  |  else if left(t) is empty then
|  |  |     new=right(t)                     // case 3: 1 child
|  |  |  else if right(t) is empty then
|  |  |     new=left(t)                      // case 3: 1 child
|  |  |  else
|  |  |     new=joinTrees(left(t),right(t))  // case 4: 2 children
|  |  |  end if
|  |  |  free memory allocated for current node t
|  |  |  t=new
|  |  end if
|  end if
|  return t