首頁 >後端開發 >Golang >Go中如何準確判斷二元樹等價?

Go中如何準確判斷二元樹等價?

DDD
DDD原創
2024-12-09 16:51:11543瀏覽

How Can We Accurately Determine Binary Tree Equivalence in Go?

Go Tour 練習#7 中的二元樹等價

Go 中的二元樹

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

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