Die gleiche Funktion in der Binärbäume-Übung von Go Tour vergleicht, ob zwei binäre Bäume haben die gleichen Werte. Die Herausforderung besteht darin, zu bestimmen, wann beide Bäume vollständig durchlaufen sind, um sie als gleichwertig zu erklären.
Die ursprüngliche Implementierung versucht, einen Kanal zum Vergleichen von Werten zu verwenden. Es steht jedoch vor dem Problem, festzustellen, wann die Kanäle leer sind.
Ein alternativer Ansatz verwendet eine Funktion höherer Ordnung und Abschlüsse, um Baumende-Bedingungen elegant zu signalisieren. Die erweiterte Walk-Funktion nutzt einen Verschluss, um eine Walk-Funktion zu initialisieren. Der Verschluss stellt sicher, dass der Kanal bei Funktionsrückgabe geschlossen wird, und verhindert so ein vorzeitiges Schließen des Kanals aufgrund einer Rekursion.
Hier ist die korrigierte Walk-Funktion:
func Walk(t *tree.Tree, ch chan int) { defer close(ch) // Closes the channel when the 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) }
Dieser überarbeitete Ansatz stellt sicher, dass der Kanal geschlossen ist Erst nachdem alle Werte gesendet wurden, kann Same die Bäume genau auf Äquivalenz vergleichen.
Das obige ist der detaillierte Inhalt vonWie können wir die Binärbaumäquivalenz in Go genau bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!