Go Tour 練習#7:二元樹等價
Go Tour 練習「二元樹」挑戰您確定兩個二元樹是否包含相同的價值觀。本練習的重點是編寫一個遞歸 Walk 函數,該函數遍歷樹並將其值傳送至通道。
在您提供的程式碼中,您遇到了確定何時完全遍歷樹的問題。雖然關閉通道看起來很直觀,但由於 Walk 函數的遞歸性質,它會過早終止遍歷。
解決此問題的一種方法是使用閉包。透過利用基於閉包的 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 函數就會自動關閉通道,表示遍歷已完成。這使得 Same 函數可以透過從通道接收兩個樹的值並確保它們相同來有效地比較它們。
以上是如何有效比較 Go 中的二元樹:解決 Go Tour 練習 #7?的詳細內容。更多資訊請關注PHP中文網其他相關文章!