首页 >后端开发 >Golang >如何有效比较 Go 中的二叉树:解决 Go Tour 练习 #7?

如何有效比较 Go 中的二叉树:解决 Go Tour 练习 #7?

Susan Sarandon
Susan Sarandon原创
2024-12-16 10:32:11571浏览

How to Efficiently Compare Binary Trees in Go: Solving the Go Tour Exercise #7?

Go Tour 练习#7:二叉树等价

Go Tour 练习“二叉树”挑战您确定两个二叉树是否包含相同的价值观。本练习的重点是编写一个递归 Walk 函数,该函数遍历树并将其值发送到通道。

在您提供的代码中,您遇到了确定何时完全遍历树的问题。虽然关闭通道看起​​来很直观,但由于 Walk 函数的递归性质,它会过早终止遍历。

解决此问题的一种方法是使用闭包。通过利用基于闭包的 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 函数就会自动关闭通道,表示遍历已完成。这使得 Same 函数可以通过从通道接收两个树的值并确保它们相同来有效地比较它们。

以上是如何有效比较 Go 中的二叉树:解决 Go Tour 练习 #7?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn