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