Java Binary Tree Remove Methode implementieren?
Hey Leute,
Ich versuche folgende Binary Tree Methode zu implementieren:
public void remove(T data) {
root = remove(root, data);
}
private Nodes<T> remove(Nodes<T> root, T data) {
Nodes<T> current = root;
if (current == null) {
return current;
}
if (current.getData().compareTo(data) > 0) {
current.getLeftChild() = remove(current.getLeftChild(), data);
} else if (current.getData().compareTo(data) < 0) {
current.getRightChild() = remove(current.getRightChild(), data);
} else {
if (current.getLeftChild() == null && current.getRightChild() == null) {
current = null;
} else if (current.getRightChild() == null) {
current = current.getLeftChild();
} else if (current.getLeftChild() == null) {
current = current.getRightChild();
} else {
Nodes<T> temp = findMinFromRight(current.getRightChild());
current.getData() = temp.getData();
current.getRightChild() = remove(current.getRightChild(), temp.getData());
}
}
return current;
}
Er zeigt mir bei folgenden Abschnitten "Variable expected" an, aber hier sollte keine Variable erwartet werden:
if (current.getData().compareTo(data) > 0) {
current.getLeftChild() = remove(current.getLeftChild(), data);
} else if (current.getData().compareTo(data) < 0) {
current.getRightChild() = remove(current.getRightChild(), data);
...
else {
Nodes<T> temp = findMinFromRight(current.getRightChild());
current.getData() = temp.getData();
current.getRightChild() = remove(current.getRightChild(), temp.getData());
}
Danke schonmal für eure Hilfe!
1 Antwort
current.getLeftChild() = remove(current.getLeftChild(), data);
Was soll das sein? Du weist einem Funktionsaufruf einen Wert zu? Bzw. einem Wert einen Wert?
Bei einer Zuweisung wird links - wie der Compiler sagt - eine Variable erwartet. Du solltest vielleicht den Setter mit dem Rückgabewert von remove() aufrufen.
Da passt etwas nicht. Die Felder in der Nodes-Klasse (wenn du sie zu Node umbenannt hast, finde ich das nur gut) als private zu kennzeichnen, ist nicht verkehrt, immerhin greifst du doch auch mit Getter- und Setter-Methoden darauf zu. Ersteres ist in deinem Code sichtbar.
Dieser Fehler:
current.getLeftChild() = remove(current.getLeftChild(), data);
wäre, wie alfredo153 schrieb, mit einem Setter auflösbar gewesen:
current.setLeftChild(remove(current.getLeftChild(), data));
war in dem fall nicht richtig. In dem Fall war der Teil des Codes Richtig. Für alle die diesen beitrag nochmal lesen: Das Problem hier war, dass die Variablen in "Node" private waren, aber public hätten sein müssen