Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "golang.org/x/tour/tree"
- )
- func dfs(t *tree.Tree, ch chan int) {
- if (t == nil) { return }
- dfs(t.Left, ch)
- ch <- t.Value
- dfs(t.Right, ch)
- }
- func Walk(t *tree.Tree, ch chan int) {
- dfs(t, ch)
- close(ch)
- }
- func Same(t1, t2 *tree.Tree) bool {
- ch1 := make(chan int)
- ch2 := make(chan int)
- go Walk(t1, ch1)
- go Walk(t2, ch2)
- var f func(ch1 chan int, ch2 chan int) bool
- f = func(ch1 chan int, ch2 chan int) bool {
- v1, ok1 := <-ch1
- v2, ok2 := <-ch2
- if (!ok1 || !ok2) {
- return ok1 == ok2
- }
- return v1 == v2 && f(ch1, ch2)
- }
- return f(ch1, ch2)
- }
- func main() {
- t1 := tree.New(1)
- t2 := tree.New(1)
- fmt.Println(Same(t1, t2))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement