Go Tour 練習#7:二叉樹的等價
在Go 遊覽中嘗試二元樹等價練習時,您可能會遇到當樹中沒有更多元素時,發出訊號的挑戰。給定的程式碼嘗試使用通道來傳遞來自樹的值,但它無法解決此訊號發送問題。
問題
在遞歸遍歷期間關閉通道提前終止值的傳輸。在 Walk() 函數中使用 close(ch) 會在傳送所有值之前關閉通道。
使用閉包的解決方案
閉包可讓您建立匿名從周圍範圍捕獲變數的函數。這可用於產生自訂 walk 函數,該函數在執行完成時會自動關閉通道。
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) }
在此解中,Walk() 函數傳回一個處理樹遍歷的 walk 閉包。當閉包退出時,它會自動關閉通道,表示沒有更多的值要發送。這確保了接收端可以確定遍歷何時完成。
以上是如何在 Go 二元樹等價練習中正確表示遍歷結束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!