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

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

Barbara Streisand
Barbara Streisand原創
2024-12-10 16:49:17636瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn