В вопросе, который вы сказали, вы берете the rightmost left child
, но в myRemoveIt
, вы переходите к leftmost right child
in:
Node<E> temp = nodeToRemove.right;
while (temp.left != null) {
temp = temp.left;
}
Но после назначения слева:nodeToRemove.left = myRemoveHelper(temp, temp.data);
.
Вам нужно изменить это на:
nodeToRemove.right = myRemoveHelper(nodeToRemove.right, temp.data);
Как теперь вы уверены, что temp.data
находится на листе (или, по крайней мере, мы знаем, что он пропустил левую сторону) иновый корень, который вы отправляете на myRemoveHelper
, является правым, поскольку новые данные уже установлены.