func New(k int) *Tree// New() returns a random binary tree holding the values k, 2k, ..., 10k.我只是尝试在戈鲁丁中遍历二叉树并向通道添加值。然后用主戈鲁廷打印它们法典func binary(t *tree.Tree, ch chan int) { if t != nil { binary(t.Left, ch) ch <- t.Value binary(t.Right, ch) }}func Walk(t *tree.Tree, ch chan int) { defer close(ch) binary(t, ch)}func main() { ch := make(chan int) go Walk(tree.New(1), ch) for i := range ch { fmt.Printf("%d ", <-ch) _ = i }}预期输出 =1 2 3 4 5 6 7 8 9 10 结果 =2 4 6 8 10
2 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
在通道上带有子句的语句从通道接收值,并将它们存储在循环变量中。forrange
这意味着该变量将保存从 接收的值,您不需要从 接收。ichch
但是,您没有使用 ,并且您确实从 接收。因此,您将跳过每两个元素(如果通道上传递的元素数量奇数,您也可能会被阻止)。ich
像这样做:
for v := range ch {
fmt.Printf("%d ", v)
}
明月笑刀无情
TA贡献1828条经验 获得超4个赞
根据伊察的建议:
func binary(t *tree.Tree, ch chan int) {
if t != nil {
binary(t.Left, ch)
ch <- t.Value
binary(t.Right, ch)
}
}
func Walk(t *tree.Tree, ch chan int) {
defer close(ch)
binary(t, ch)
}
func main() {
ch := make(chan int)
go Walk(tree.New(1), ch)
for v := range ch {
fmt.Printf("%d ", v)
}
}
- 2 回答
- 0 关注
- 63 浏览
添加回答
举报
0/150
提交
取消