首頁 > 後端開發 > Golang > 如何在 Go 二元樹等價練習中正確表示遍歷結束?

如何在 Go 二元樹等價練習中正確表示遍歷結束?

Barbara Streisand
發布: 2024-12-10 16:49:17
原創
582 人瀏覽過

How Can I Properly Signal the End of Traversal in a Go Binary Tree Equivalence Exercise?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板