public void remove(T data) {
    if (!this.isEmpty()) {
      if (this.getData().compareTo(data) < 0) {
        if (this.getRight() != null)
          this.getRight().remove(data);
      } else if (this.getData().compareTo(data) > 0) {
        if (this.getLeft() != null)
          this.getLeft().remove(data);
      } else
        removeRoot();
    }
    this.balancing();
  }