Go Tour 练习#7:二叉树的等价
在 Go 游览中尝试二叉树等价练习时,您可能会遇到当树中没有更多元素时,发出信号的挑战。给定的代码尝试使用通道来传递来自树的值,但它无法解决此信号发送问题。
问题
在递归遍历期间关闭通道提前终止值的传输。在 Walk() 函数中使用 close(ch) 会在发送所有值之前关闭通道。
使用闭包的解决方案
闭包允许您创建匿名从周围范围捕获变量的函数。这可用于生成自定义 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() 函数返回一个处理树遍历的 walk 闭包。当闭包退出时,它会自动关闭通道,表明没有更多的值要发送。这确保了接收端可以确定遍历何时完成。
以上是如何在 Go 二叉树等价练习中正确表示遍历结束?的详细内容。更多信息请关注PHP中文网其他相关文章!