Ich versuche, eine Methode zu schreiben, die Knoten aus BST um den angegebenen Wert entfernen würde, und ich brauche es, um diesen gelöschten Wert zurückzugeben. Ich habe verschiedene Beispiele für rekursive Implementierungen gefunden, aber aufgrund ihrer Natur können sie keinen gelöschten Knoten, sondern den Root zurückgeben. Hier ist, was ich habe jetztGelöschten Knoten aus dem binären Suchbaum zurückgeben
public TreeNode remove(TreeNode node, int data) {
if (null == node) {
return null;
}
if (data < node.st.getkey()) {
node.left = remove(node.left, data);
} else if (data > node.st.getkey()) {
node.right = remove(node.right, data);
} else { // case for equality
if (node.left != null && node.right != null) {
TreeNode minInRightSubTree = min(node.right);
copyData(node , minInRightSubTree);
node.right = remove(node.right, minInRightSubTree.st.getkey());
} else {
if (node.left == null && node.right == null) {
node = null;
} else {// one child case
TreeNode deleteNode = node;
node = (node.left != null) ? (node.left) : (node.right);
deleteNode = null;
}
}
}
return node;
}
Kann ich kommen mit einigen Hack, um es gelöscht Knoten zu machen zurückzukehren, oder sollte ich in iterativen Algorithmus (und wenn ja, würde ich es wirklich schätzen, wenn Sie könnte mich mit dem Link anschließen).
Ich bin gerade mit der Idee gekommen, einen zusätzlichen öffentlichen Knoten zu deklarieren, der lastRemovedNode halten würde. –