Heim >Backend-Entwicklung >Golang >Wie vergleiche ich Binärbäume in Go effizient: Lösung der Go-Tour-Übung Nr. 7?
Go-Tour-Übung Nr. 7: Binärbäume-Äquivalenz
Die Go-Tour-Übung „Binärbäume“ fordert Sie heraus, festzustellen, ob zwei Binärbäume enthalten die gleichen Werte. Die Übung konzentriert sich auf das Schreiben einer rekursiven Walk-Funktion, die die Bäume durchläuft und ihre Werte an einen Kanal sendet.
In dem von Ihnen bereitgestellten Code stoßen Sie auf ein Problem bei der Bestimmung, wann die Bäume vollständig durchquert wurden. Obwohl das Schließen des Kanals intuitiv erscheinen könnte, würde es die Durchquerung aufgrund der rekursiven Natur der Walk-Funktion vorzeitig beenden.
Eine Lösung für dieses Problem ist die Verwendung von Schließungen. Durch die Nutzung einer abschlussbasierten Version der Walk-Funktion können Sie das Schließen des Kanals verzögern, bis alle Werte gesendet wurden. Der untenstehende modifizierte Code demonstriert diese Technik:
func Walk(t *tree.Tree, ch chan int) { defer close(ch) // Automatically closes the channel when this function returns var walk func(t *tree.Tree) walk = func(t *tree.Tree) { if t == nil { return } walk(t.Left) ch <- t.Value walk(t.Right) } walk(t) }
Mit dieser Modifikation schließt die Walk-Funktion automatisch den Kanal, sobald alle Werte gesendet wurden, was den Abschluss der Durchquerung signalisiert. Dadurch kann die Same-Funktion die Werte beider Bäume effektiv vergleichen, indem sie sie von den Kanälen empfängt und sicherstellt, dass sie identisch sind.
Das obige ist der detaillierte Inhalt vonWie vergleiche ich Binärbäume in Go effizient: Lösung der Go-Tour-Übung Nr. 7?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!