A Tour of Go - Exercise: Equivalent Binary Trees
2012-12-16 21:23
525 查看
A Tour of Go
Exercise: Equivalent Binary Trees
There can be many different binary trees with the same sequence of values stored at the leaves. For example, here are two binary trees storing the sequence 1, 1, 2, 3, 5, 8, 13.A function to check whether two binary trees store the same sequence is quite complex in most languages. We'll use Go's concurrency and channels to write a simple solution.
This example uses the
treepackage, which defines the type:
type Tree struct { Left *Tree Value int Right *Tree }
1. Implement the
Walkfunction.
2. Test the
Walkfunction.
The function
tree.New(k)constructs a randomly-structured binary tree holding the values
k,
2k,
3k,
...,
10k.
Create a new channel
chand 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
Samefunction using
Walkto determine whether
t1and
t2store
the same values.
4. Test the
Samefunction.
Same(tree.New(1), tree.New(1))should return true, and
Same(tree.New(1), tree.New(2))should return false.
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.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) result := true for i := 0; i < 10; i ++ { v1 := <- ch1 v2 := <- ch2 result = (v1 == v2) } return result } func main() { // ch := make(chan int) // go Walk(tree.New(1), ch) // for i := 0; i < 10; i ++ { // v := <- ch // fmt.Println(v) // } fmt.Println(Same(tree.New(1), tree.New(1))) fmt.Println(Same(tree.New(1), tree.New(2))) }
相关文章推荐
- 【GoLang笔记】A Tour of Go - Exercise: Equivalent Binary Trees
- Go Exercise: Equivalent Binary Trees
- go语言Exercise: Equivalent Binary Trees
- A Tour of Go: Exercise: Rot13 Reader
- A Tour of Go : Exercise: Slices
- A Tour of Go : Exercise: Fibonacci closure
- A Tour of Go - Exercise: Web Crawler
- A Tour of Go : Advanced Exercise: Complex cube roots
- 【GoLang笔记】A Tour of Go - Exercise: Images
- A Tour of Go Exercise: Maps
- A Tour of Go---Exercise: Fibonacci closure
- A Tour of Go: Exercise: Rot13 Reader
- A Tour of Go : Exercise: Loops and Functions
- 【GoLang笔记】A Tour of Go - Exercise: Web Crawler
- A Tour of Go Exercise: Images
- A Tour of Go : Exercise: Maps
- A Tour of Go Range
- A Brief Tour of the Trees and Forests
- Go指南练习之《等价二叉树》(Equivalent Binary Trees)
- A Tour of Go For