我有BST,當我想從BST刪除節點時,什麼也沒有發生。有人能解釋爲什麼嗎?刪除BST節點(2)
這裏是我的代碼:
private void delete(int value, Node node) {
if (value<node.value) delete(value, node.left);
else if (value> node.value)
delete(value, node.right);
else {
if (node.left != null && node.right != null) {
int maxFromLeft = findMax(node.left);
node.value = maxFromLeft;
delete(maxFromLeft, node.left);
} else if (node.left != null) {
Node trash = node;
node = node.left;
trash = null;
} else if (node.right != null) {
Node trash = node;
node = node.right;
trash = null;
} else {
node = null;
}
}
}
請您的問題提供了一個[MCVE(http://stackoverflow.com/help/mcve)。這將幫助其他人重現您的錯誤,並找到它們,因爲有時錯誤隱藏在其他函數中。例如,一個簡化的'Node'類和'findMax'函數。如果你能提供一個簡單的測試用例和錯誤輸出,預期輸出,那將會更好。 – Nier
它看起來像你正在假設通過引用的語義,Java沒有。 –