我完成了用于树比较的巡回练习(#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
提交
取消