next up previous contents
Next: Searching again Up: Binary search trees Previous: Deleting nodes from a   Contents

A Java implementation of the deletion algorithm

class BinTree
{ private Node root;  

  public void delete(int v)
  { root=Node.delete(v,root);
  }

  private class Node
  { private int value;
    private Node left;
    private Node right;

    static Node delete(int v,Node n)
    { if(n!=null)
      { if(n.value==v)
        { if(n.left==null) return n.right;
          else if(n.right==null) 
            return n.left;
          else
          { n.value=fetch_left(n.right);
            n.right=del_left(n.right);
          }
        }
        else if(v<n.value) 
          n.left=delete(v,n.left);
        else n.right=delete(v,n.right);
      }
      return n;
    }             

    static int fetch_left(Node n)   
    { while(n.left!=null) n=n.left;
      return n.value;
    }

    static Node del_left(Node n)    
    { if(n.left!=null)
      { n.left=del_left(n.left);
        return n;
      }
      else return n.right;
    }
  }
}

Deletion of a node requires the same number of steps as searching or inserting a new node.



Martin Escardo 2005-01-11