Это домашнее задание; пожалуйста, не просто дайте мне код
У меня есть два метода: remove(T data)
и removeRec(Node<T> node, T data)
.
В текущем состоянии кажется, что мой код удаляет только root
node BST.
@Override
public T remove(T data) {
if (data == null) {
throw new IllegalArgumentException("Data is null");
}
if (root == null) {
throw new java.util.NoSuchElementException("BST is empty");
} else {
size--;
BSTNode<T> dummy = new BSTNode<T>(null);
return removeRec(root, data, dummy).getData(); //This is probably wrong too
}
}
/**
* Helper method to recursively search for, and remove the BSTNode with
* the given data in it
* @param node is the node we're currently at
* @param data is the data we're looking for
* @param temp I have no idea why
* @return node that was removed
*/
private BSTNode<T> removeRec(BSTNode<T> node, T data, BSTNode<T> temp) {
if (compare(data, node.getData()) < 0) {
temp.setLeft(removeRec(node.getLeft(), data, temp));
} else if (compare(data, node.getData()) > 0) {
temp.setRight(removeRec(node.getRight(), data, temp));
} else if (node.getLeft() != null && node.getRight() != null) {
temp.setData(findMin(node.getRight()).getData());
temp.setRight(removeRec(node.getRight(), data, temp));
} else {
if (node.getLeft() != null) {
temp = node.getLeft();
} else {
temp = node.getRight();
}
}
return temp;
}
private int compare(T a, T b) {
return a.compareTo(b);
}
Мой инструктор сказал мне (как подсказку), что я должен увидеть, что в третьем аргументе метод, в данном случае, BSTNode<T> temp
. Я не понимаю, как это помогает, или как его использовать. Я не вижу, как помогает использование третьего аргумента; и я не могу найти что-либо в Интернете относительно того, почему вы тоже это сделаете.