Как правило, корень поддерева может измениться, и это рекурсия, чтобы заставить его работать, возвращаемое значение должно быть новым корнем поддерева, несмотря на то, изменилось оно или нет.
Ниже приведены дополнения() метод, взятый из моего BST, подразумеваемого в Java, который при всех пройденных тестовых примерах:
/**
* Add a new value.
*
* @param v
*/
@Override
public void add(T v) {
root = add(root, v);
}
/**
* Add to a subtree start from given node.
*
* @param current root of a subtree to add node to,
* @param v
* @return the new root of subtree,
*/
protected BSTNode<T> add(BSTNode<T> current, T v) {
if (current == null) { // subtree is empty,
size++;
return new BSTNode<>(v);
}
// compare,
int compareFlag = v.compareTo(current.value);
// check this or subtree,
if (compareFlag < 0) { // smaller, go to left subtree,
current.left = add(current.left, v);
} else if (compareFlag > 0) { // larger, go to right subtree,
current.right = add(current.right, v);
} else { // equals, ignore it,
}
return current;
}