Ich versuche, eine Methode zu schreiben, um einen Knoten aus einem binären Suchbaum zu löschen. Hier ist meine Methode um einen Knoten zu löschen.Java: das Setzen von Objekt auf null innerhalb einer Methode hat keine Wirkung (Wiederverwendung von Code)
public void delete(int deletionNodeValue) {
Node<Integer> nodeToBeDeleted = getNode(deletionNodeValue);
if(nodeToBeDeleted == null) return; // No node with such value exists throw an error
if(isLeafNode(nodeToBeDeleted)) {
nodeToBeDeleted = null;
} else if (nodeToBeDeleted.getNumChildren() == 1) {
bypassNode(nodeToBeDeleted);
}else {
replace(nodeToBeDeleted, getSuccessor(nodeToBeDeleted.getValue()));
}
}
ich diese Methode auf einem Blattknoten überprüft, obwohl nach dem Debuggen ich, dass die Ausführung von nodeToBeSelected=null
stattfindet, entdecken, wird der Knoten nicht gelöscht. Da ich immer noch nach dem gelöschten Wert suchen kann, kann das Programm es trotzdem abrufen.
tree.add(5);
tree.delete(5);
System.out.println(tree.getNode(5).getValue()); // Output : 5, should've been deleted
Hier ist meine GetNode() -Methode
public Node<Integer> getNode(int searchValue) {
Node<Integer> currentNode = root;
while(currentNode != null) {
int currentNodeValue = currentNode.getValue();
if(searchValue == currentNodeValue)
return currentNode;
else if(searchValue < currentNodeValue)
currentNode = currentNode.getLeftChild();
else
currentNode = currentNode.getRightChild();
}
// if no node with given value is found
return null;
}
Ist GetNode() -Methode den gefundenen Knoten durch Wert zurückgibt? Wie kann ich die Referenz zurückgeben und den gefundenen Knoten direkt manipulieren?
enthalten @NashVali Ich glaube nicht, sollten Sie 'leftNode' werden die Definition und' rightNode' als 'public' Felder .Verwenden von Setter ist eine bessere Option. – CKing
Ja, sie sollten nicht öffentlich sein. Dieser Code ist ein Ausschnitt einer fiktiven Methode 'void deleteChild (Node nodeToBeDeleted)'. – CoronA
Die fiktive Methode kann immer noch fiktive Setter verwenden, anstatt fiktive öffentliche Felder zu verwenden. Siehe meine Antwort. – CKing