Go-Tour-Übung Nr. 7: Äquivalenz von Binärbäumen
Beim Versuch der Binärbaum-Äquivalenzübung in der Go-Tour stoßen Sie möglicherweise auf eine Herausforderung bei der Signalisierung, wenn keine Elemente mehr in den Bäumen vorhanden sind. Der angegebene Code versucht, einen Kanal zu verwenden, um Werte aus den Bäumen zu kommunizieren, kann dieses Signalproblem jedoch nicht beheben.
Das Problem
Schließen eines Kanals während der rekursiven Durchquerung bricht die Übertragung der Werte vorzeitig ab. Durch die Verwendung von close(ch) innerhalb der Walk()-Funktion wird der Kanal geschlossen, bevor alle Werte gesendet werden.
Eine Lösung mit Schließung
Mit einer Schließung können Sie einen anonymen Kanal erstellen Funktion, die Variablen aus dem umgebenden Bereich erfasst. Dies kann verwendet werden, um eine benutzerdefinierte Walk-Funktion zu generieren, die den Kanal automatisch schließt, wenn seine Ausführung abgeschlossen ist.
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) }
In dieser Lösung gibt die Walk()-Funktion einen Walk-Abschluss zurück, der die Durchquerung des Baums übernimmt . Wenn die Schließung beendet wird, wird der Kanal automatisch geschlossen, was darauf hinweist, dass keine weiteren Werte gesendet werden müssen. Dadurch wird sichergestellt, dass der Empfänger feststellen kann, wann die Durchquerung abgeschlossen ist.
Das obige ist der detaillierte Inhalt vonWie kann ich das Ende der Durchquerung in einer Go-Binary-Tree-Äquivalenzübung richtig signalisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!