首頁 > 後端開發 > Golang > 我們如何有效地測試 Go 中的二元樹等價性?

我們如何有效地測試 Go 中的二元樹等價性?

DDD
發布: 2024-12-17 22:16:12
原創
298 人瀏覽過

How Can We Efficiently Test for Binary Tree Equivalence in Go?

二元樹的Go 等價性測試

二元樹等價性測試,如Go Tour 練習#7 所示,對確定二元樹提出了挑戰包含相同值的兩棵樹的等價性。人們可以嘗試透過同時遍歷兩棵樹並將它們的值發送到通道來實現這一目標。然而,確保遍歷的終止和剩餘元素不存在的訊號被證明是一個關鍵障礙。

提供的程式碼嘗試透過將值從樹傳送到通道並同時使用它們來處理此任務在同一個函數中。然而,在 Walk 函數中使用 close(ch) 是有問題的,因為它會過早終止通道,阻止發送所有值。

幸運的是,golang-nuts 小組提出了一個優雅的解決方案,利用閉包來解決本期:

func Walk(t *tree.Tree, ch chan int) {
    defer close(ch) // Closes the channel upon function return
    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)
}
登入後複製

修改後的程式碼利用閉包來實現樹的遍歷。 defer 語句確保通道在遍歷完成後關閉。此機制可以優雅地處理剩餘元素不存在的訊號,確保準確的等價性檢查。

以上是我們如何有效地測試 Go 中的二元樹等價性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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