package ebt import ( "code.google.com/p/go-tour/tree" ) // Walk walks the tree t sending all values // from the tree to the channel ch. func Walk(t *tree.Tree, ch chan int) { // do it as a nested closure so that I can control the call to close so // that I can use the range-based forloop in main.main defer close(ch) var walk func(t *tree.Tree) walk = func(t *tree.Tree) { if t != nil { walk(t.Left) ch <- t.Value walk(t.Right) } } walk(t) } // Same determines whether the trees // t1 and t2 contain the same values. func Same(t1, t2 *tree.Tree) bool { ch1 := make(chan int) ch2 := make(chan int) go Walk(t1, ch1) go Walk(t2, ch2) for i := range ch1 { if i != <-ch2 { return false } } return true }