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 關注
- 92 瀏覽
添加回答
舉報
0/150
提交
取消