Exemplo n.º 1
0
  public boolean remove(int x) {
    BSTNode current = root;
    BSTNode parent = null;
    boolean branch = true; // true =left, false =right

    while (current != null) {

      if (current.value == x) {
        BSTNode bigson = current;
        while (bigson.left != null || bigson.right != null) {
          parent = bigson;
          if (bigson.right != null) {
            bigson = bigson.right;
            branch = false;
          } else {
            bigson = bigson.left;
            branch = true;
          }
        }

        //		System.out.println("Remove: current "+current.value+" parent "+parent.value+" bigson
        // "+bigson.value);
        if (parent != null) {
          if (branch) {
            parent.left = null;
          } else {
            parent.right = null;
          }
        }

        if (bigson != current) {
          current.value = bigson.value;
        } else {;
        }

        return true;
      }

      parent = current;
      //	    if (current.value <x ) { // THERE WAS ERROR
      if (current.value > x) {
        current = current.left;
        branch = true;
      } else {
        current = current.right;
        branch = false;
      }
    }

    return false;
  }