goroutine
http://127.0.0.1:3999/concurrency/8
question
使用 go 判断 两个 树 存放的 序列 是否 相同, 如果 相同 他们 被称为 equivalent_tree
tree struct
type Tree struct {
Left *Tree
Value int
Right *Tree
}
由于 递归的 写法 比较简单, 此处 使用循环的 形式 来实现.
因为 循环的 写法 不存在 调用栈的 瓶颈, 所以 在实际工程中, 能够 避免 递归 还是 避免递归吧.
judge tree
package main
import "golang.org/x/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) {
_ts := make(chan *tree.Tree, 100)
_ts <- t
OuterLoop:
for {
_f1 := func(_tmp *tree.Tree) {
fmt.Println(_tmp.Value)
ch <- _tmp.Value
for _, v := range []*tree.Tree{_tmp.Left, _tmp.Right} {
if v != nil {
_ts <- v
}
}
}
select {
case _tmp := <-_ts:
_f1(_tmp)
default:
fmt.Println("break")
break OuterLoop
}
}
}
// Same determines whether the trees
// t1 and t2 contain the same values.
func Same(t1, t2 *tree.Tree) bool {
return true
}
func main() {
_t1 := tree.New(1)
_c1 := make(chan int, 100)
Walk(_t1, _c1)
_t2 := tree.New(1)
_c2 := make(chan int, 100)
Walk(_t2, _c2)
fmt.Println(_c)
}