为了账号安全,请及时绑定邮箱和手机立即绑定

去游览树比较不起作用吗?

去游览树比较不起作用吗?

Go
千巷猫影 2021-05-11 10:24:53
我完成了用于树比较的巡回练习(#69),并且能够有效地比较两棵树。这是代码    package main    import "tour/tree"    import "fmt"    // Walk walks the tree t sending all values    // from the tree to the channel ch.    func Walk(t *tree.Tree, ch chan int) {        if t == nil {            return        }        Walk(t.Left,ch)        ch <- t.Value        Walk(t.Right,ch)    }    // Same determines whether the trees    // t1 and t2 contain the same values.    func Same(t1, t2 *tree.Tree) bool {        c := make(chan int)        c2 := make(chan int)        go Walk(t1,c)        go Walk(t2,c2)        for i:= 0; i < 10; i++ {            if <-c != <-c2 {                return false            }        }        return true    }    func main() {        fmt.Println(Same(tree.New(1),tree.New(1)))    }令我感到困惑的部分是,如果我将走动功能中的命令顺序切换为    ch <- t.Value    Walk(t.Right,ch)    Walk(t.Left,ch)比较不再有效。我尝试两次打印Walk(tree.New(1),c)的结果,奇怪的是打印了第一个电话    10,5,7,9...同时打印Walk(tree.New(1),c)的第二次调用    7,9,10,8...为什么在切换步行命令的顺序时两次调用同一函数会导致两个不同的输出?
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信