Пример #1
0
 public void Remove(int value, BST parent)
 {
     if (value < this.value)
     {
         // look left
         if (left != null)
         {
             left.Remove(value, this);
         }
     }
     else if (value > this.value)
     {
         // look right
         if (right != null)
         {
             right.Remove(value, this);
         }
     }
     else
     {
         // remove case
         if (left != null && right != null)
         {
             // full subtree
             this.value = right.getMinValue();
             right.Remove(this.value, this);
         }
         else if (parent == null)
         {
             // partial subtree case
             if (left != null)
             {
                 this.value = left.value;
                 right      = left.right;
                 left       = left.left;
             }
             else if (right != null)
             {
                 this.value = right.value;
                 left       = right.left;
                 right      = right.right;
             }
             else
             {
                 // single node tree here
             }
         }
         else if (parent.left == this)
         {
             parent.left = left != null ? left : right;
         }
         else if (parent.right == this)
         {
             parent.right = left != null ? left : right;
         }
     }
 }
Пример #2
0
 public int getMinValue()
 {
     if (left == null)
     {
         return(this.value);
     }
     else
     {
         return(left.getMinValue());
     }
 }