Go 等价二叉树练习,实现;“并发性”;

Go 等价二叉树练习,实现;“并发性”;,go,concurrency,Go,Concurrency,我正在解决围棋之旅中的练习。 此练习需要实现一个Walk函数,该函数将遍历一棵树,并将所有值有序地从树发送到通道 演习声明指出: 。。。我们将使用Go的并发性和通道来编写一个简单的解决方案 阅读这一行,我认为实现Walk是一个挑战,它为每个左/右子树启动一个goroutine,并使Walk比非并发版本运行得更快(关于时间复杂度)。让我用代码更详细地解释一下 这是我早期的行走代码: func Walk(t*tree.tree,ch chan int){ 延迟关闭(ch) 如果t==nil{retu

我正在解决围棋之旅中的练习。 此练习需要实现一个
Walk
函数,该函数将遍历一棵树,并将所有值有序地从树发送到通道

演习声明指出:

。。。我们将使用Go的并发性和通道来编写一个简单的解决方案

阅读这一行,我认为实现
Walk
是一个挑战,它为每个左/右子树启动一个goroutine,并使
Walk
比非并发版本运行得更快(关于时间复杂度)。让我用代码更详细地解释一下

这是我早期的行走代码:

func Walk(t*tree.tree,ch chan int){
延迟关闭(ch)
如果t==nil{return}
lch,rch:=制造(成交量),制造(成交量)
步行(t.左,lch)

对于v:=range lch{ch右子树中的值需要一个缓冲区(例如缓冲通道),因为它们必须持续存在,直到这些值之前的值(
记住,
go-Somefunc()
在新的goroutine中运行
Somefunc
。一旦代码到达
范围{}
block,它永远不会离开。
range
对于处理频道来说非常好,但是在你在频道上调用
close
之前,请将其视为一个无限循环。@NateH06它确实会关闭,在第一行的
defer
中。这个问题是。如果任何亲密的投票者愿意分享他们在投票中缺少的东西问题或如何不清楚,这将是非常感谢。