这是一份作业,请不要直接给我代码
我有两个方法:remove(T data)
和 removeRec(Node<T> node, T data)
。
目前看来,我的代码只能删除BST的root
节点。
@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
。然而我不明白这有什么帮助,也不知道如何使用它。我不明白使用第三个参数有什么好处,也没有在网上找到任何相关信息。