private boolean isBSTValid() {
            if (isNil()) {
                return true;
            } else {
                if (hasLeftChild() && getKey() < getLeftChild().getKey()) {
                    return false;
                } else if (hasRightChild()
                        && getKey() > getRightChild().getKey()) {
                    return false;
                } else {
                    return getLeftChild().isBSTValid()
                            && getRightChild().isBSTValid();
                }
            }
        }