首页 > 后端开发 > Golang > Go 中 Goroutine 和 Channels 如何高效比较两棵二叉树的值?

Go 中 Goroutine 和 Channels 如何高效比较两棵二叉树的值?

Barbara Streisand
发布: 2024-12-15 18:10:18
原创
999 人浏览过

How Can Goroutines and Channels Efficiently Compare the Values of Two Binary Trees in Go?

Go Tour 中的等效二叉树

本练习涉及确定两个二叉树是否包含相同的值。在您的实现中,您正确地使用 goroutine 同时遍历两棵树并将它们的值发送到通道。然而,当试图表明树中没有更多元素时,就会出现问题。

避免过早关闭

在 Walk 上使用 close(ch) 会过早地关闭在发送所有值之前关闭通道,因为递归会提前退出。相反,一个优雅的解决方案涉及使用闭包:

func Walk(t *tree.Tree, ch chan int) {
    defer close(ch) // 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)
}
登录后复制

这个闭包捕获 ch 通道并确保它仅在没有更多节点可遍历时才关闭。 defer close 语句确保闭包在所有递归调用完成后运行。

通过此修复,您的 Same 函数可以通过迭代地从通道接收值并比较它们来准确确定等效性。

以上是Go 中 Goroutine 和 Channels 如何高效比较两棵二叉树的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板