a tour of go 上面的一个小问题

package main

import (
    "golang.org/x/tour/tree"
    "fmt"
)


func Walk(t *tree.Tree, ch chan int) {
    if t == nil {
        return
    }
    if t.Left != nil {
        Walk(t.Left, ch)
    } else {
        ch <- t.Value
        Walk(t.Right, ch)
    }

}

func helper(t *tree.Tree, ch chan int) {
    Walk(t, ch)
    defer close(ch)
}

// Same 检测树 t1 和 t2 是否含有相同的值。
func Same(t1, t2 *tree.Tree) bool {
    ch1 := make(chan int)
    ch2 := make(chan int)

    go helper(t1, ch1)
    go helper(t2, ch2)

    for {
        v1, ok1 := <- ch1
        v2, ok2 := <- ch2
        fmt.Printf("%d:%v -- %d:%v\n", v1, ok1, v2, ok2)
        if !ok1 && !ok2 {
            return true
        } else if v1 != v2 {
            return false
        }

    }

}

func main() {
    fmt.Println(Same(tree.New(1), tree.New(1)))
}

判断两棵树中的元素是否相同,为何 ch2读取到第二个数字的时候就返回ok2 为false了?? 我明明是在退出walk函数之后才执行的close(ch)啊?

共 1 个回复


sivolin

数据结构没学好…… Walk函数写错了,此问题关闭

# 0