Go Tour 的二叉樹練習中的相同函數比較兩個二元樹是否樹具有相同的值。挑戰在於確定何時完全遍歷兩棵樹以聲明它們相等。
原始實作嘗試使用通道來比較值。然而,它面臨著確定通道何時為空的問題。
另一種方法是採用高階函數和閉包來優雅地發出樹結束條件的訊號。增強的 Walk 函數利用閉包來初始化 walk 函數。閉包確保通道在函數返回時關閉,防止因遞歸而導致通道過早關閉。
這是修正後的 Walk 函數:
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) }
此修改後的方法可確保通道關閉僅在發送所有值後,Same 才能準確比較樹的等效性。
以上是Go中如何準確判斷二元樹等價?的詳細內容。更多資訊請關注PHP中文網其他相關文章!