# Go Exercise: Equivalent Binary Trees

resouer · · 2675 次点击 · · 开始浏览

```package main

import (
"fmt"
"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) {
if t.Left != nil {
Walk(t.Left, ch)
}
ch<-t.Value
if t.Right != nil {
Walk(t.Right, ch)
}
}

// 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:=0; i<10; i++ {
if <-ch1 != <-ch2 {
return false
}
}
return true
}

func main() {
ch := make(chan int)
go Walk(tree.New(1), ch)

for i:=0; i<10; i++ {
fmt.Println(<-ch)
}

fmt.Println("Equivalent Binary Trees?",
Same(tree.New(1), tree.New(1)))

fmt.Println("Equivalent Binary Trees?",
Same(tree.New(1), tree.New(2)))
}```

1. Implement the `Walk` function.

2. Test the `Walk` function.

The function `tree.New(k)` constructs a randomly-structured binary tree holding the values `k``2k``3k`, ..., `10k`.

Create a new channel `ch` and kick off the walker:

`go Walk(tree.New(1), ch)`

Then read and print 10 values from the channel. It should be the numbers 1, 2, 3, ..., 10.

3. Implement the `Same` function using `Walk` to determine whether `t1` and`t2` store the same values.

4. Test the `Same` function.

`Same(tree.New(1), tree.New(1))` should return true, and`Same(tree.New(1), tree.New(2))` should return false.

[写完这个小练习，basic部分暂时完成，顺便给go tour提交了一个commit]

0 回复

• 请尽量让自己的回复能够对别人有帮助
• 支持 Markdown 格式, **粗体**、~~删除线~~、``单行代码``
• 支持 @ 本站用户；支持表情（输入 : 提示），见 Emoji cheat sheet
• 图片支持拖拽、截图粘贴等方式上传
```package main

import (
"fmt"
"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) {
if t.Left != nil {
Walk(t.Left, ch)
}
ch<-t.Value
if t.Right != nil {
Walk(t.Right, ch)
}
}

// 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:=0; i<10; i++ {
if <-ch1 != <-ch2 {
return false
}
}
return true
}

func main() {
ch := make(chan int)
go Walk(tree.New(1), ch)

for i:=0; i<10; i++ {
fmt.Println(<-ch)
}

fmt.Println("Equivalent Binary Trees?",
Same(tree.New(1), tree.New(1)))

fmt.Println("Equivalent Binary Trees?",
Same(tree.New(1), tree.New(2)))
}```

1. Implement the `Walk` function.

2. Test the `Walk` function.

The function `tree.New(k)` constructs a randomly-structured binary tree holding the values `k``2k``3k`, ..., `10k`.

Create a new channel `ch` and kick off the walker:

`go Walk(tree.New(1), ch)`

Then read and print 10 values from the channel. It should be the numbers 1, 2, 3, ..., 10.

3. Implement the `Same` function using `Walk` to determine whether `t1` and`t2` store the same values.

4. Test the `Same` function.

`Same(tree.New(1), tree.New(1))` should return true, and`Same(tree.New(1), tree.New(2))` should return false.

[写完这个小练习，basic部分暂时完成，顺便给go tour提交了一个commit]