package main import ( "code.google.com/p/go-tour/tree" "fmt" ) // 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 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) close(ch) } // Same determines whether the trees // t1 and t2 contain the same values. func Same(t1, t2 *tree.Tree) bool func main() { t := tree.New(1) ch := make(chan int) go Walk(t, ch) fmt.Printf("%v\n", t) for i := range ch { fmt.Printf("%d, ", i) } fmt.Println() }