Sie suchen eine Bedingung suchen, der wahr ist, wenn left
und right
beide null
sind oder wenn sie beide nicht null
sind. Dies kann wie dieser
if (t.left == null && t.right == null) {
return true;
}
if (t.left != null && t.right != null) {
return true;
}
return false;
wie diese
if ((t.left == null && t.right == null)
|| (t.left != null && t.right != null)){
return true;
}
return false;
ähnliche
return (t.left == null && t.right == null)
|| (t.left != null && t.right != null);
oder für ernsthafte Geeks ausgedrückt werden, wie folgt aus:
return (t.left == null) == (t.right == null);
Der letzte Ausdruck garantiert einige Diskussion, weil ich t vergleicht left
und right
mit null
und vergleicht dann die Ergebnisse dieser beiden Vergleiche untereinander, um das Endergebnis zu erhalten.
Um zu sehen, ob alle Knoten im Baum 0 oder 2 Kinder hat man es rekursiv zu tun haben würde:
public static boolean isLeafOrHasTwoChildren(Node t) {
// Both nulls
if (t.left == null && t.right == null) {
return true;
}
// One is null, the other one is not null
if (t.left == null || t.right == null) {
return false;
}
// Recurse down the tree
return isLeafOrHasTwoChildren(t.left)
&& isLeafOrHasTwoChildren(t.right);
}
kein Problem. Ich habe noch eine weitere Frage, es tut mir leid, ich möchte nur meine Fragen verstehen. Was ist, wenn ein Knoten mit 2 Kindern nur dann gültig ist, wenn (Größe-von-größer-Kind <= Größe-von-kleiner-Kind * 3)? Müsstest du Max und Min eines Knotens finden? – yummyyenni
@yummyyenni Das Problem basierend auf Baumgrößen ist viel schwieriger. Sie sollten besser Zahlen in den Knoten speichern, um zu vermeiden, dass sie ständig neu berechnet werden. Vielleicht möchten Sie zuerst versuchen, dies zu lösen, und dann eine weitere Frage stellen, wenn die Lösung nicht funktioniert. – dasblinkenlight