Ich studiere für Codierung Interviews und arbeiten mit vielen verschiedenen Datenstrukturen.Verständnis der Logik der Inorder-Traversal von BST, Python
Ich bin relativ neu zu Tree Probleme und habe täglich Probleme zu üben.
Es ist eine Sache, Formeln zur Erinnerung zu haben, und eine andere, um sie wirklich zu verstehen. Wenn ich etwas verstehe, ist es leicht, dieses Verständnis auf schwierigere Probleme anzuwenden.
Rekursive Lösungen sind für mich etwas schwieriger zu visualisieren und während sie intuitiv Sinn ergeben, versuche ich ein tiefes Verständnis davon zu bekommen, was auf dem Stack passiert.
Ich habe einen Baum und möchte in der Reihenfolge Traversal tun. Kein Problem.
data = []
def checkBST(root):
if root:
checkBST(root.left)
data.append(root.data)
checkBST(root.right)
print(data)
I geschaffen, um die Datenvariable out zu drucken, was auf jedem durch die Methode übergeben gespeichert wird.
Es gedruckt
[]
[1]
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
ich logisch bin versucht zu schauen, was geschieht, und wollen wissen, ob meine Logik korrekt ist.
Es gibt 15 gedruckte Ergebnisse und 7 Knoten. Wir kommen jedoch zu 15, weil es 8 Orte gibt, die auf Knoten überprüft wurden, wo der Knoten None
ist. Das passiert auf den Knoten 1, 3, 5, 7.
Wir prüfen die linke Hälfte des Baumes vor der rechten.
[]
#nothing stored because we move onto Node 2 as we don't hit the base case.
[1]
#1 stored because Node 1 doesn't have a left value. So we move onto the append call.
[1]
#1 returned because Node 1 doesn't have a right value.
[1, 2]
#2 stored because because we finished checking the left side and moved onto append data.
[1, 2, 3]
#3 is stored because we are calling the in order traversal on the right side of two now.
[1, 2, 3]
#3 is returned again because it doesn't have a root.left
[1, 2, 3]
#3 is returned again because it doesn't have a root.right
[1, 2, 3, 4]
# we hit the append method for 4, now we move onto the in order traversal on the right
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
Die rechte Seite wird wie links überprüft werden, so dass ich meine Logik nicht schreiben, wie es überflüssig sein würde.
Ich möchte nur klären, wenn ich dieses Problem im richtigen Format ansehe.
Danke für jede Hilfe, um dies zu verstehen!
Ich finde die Ausgabe einfacher zu verstehen, wenn der 'print' die erste Zeile in der rekursiven Methode ist. Und es hilft, etwas zu drucken, z.B. 'root.data', das als Wegweiser dient, um Sie wissen zu lassen, wo Sie sich im Baum befinden. Also 'print root.data, data' als erste Zeile, wäre mein Vorschlag. – user3386109