Go Tour练习等价二叉查找树

本篇是Go语言之旅练习之”等价查找二叉树“的学习记录。

++++++++++++++++++++++++++++++++++++++++++++++++++++

1. 实现 Walk 函数。

2. 测试 Walk 函数。

函数 tree.New(k) 用于构造一个随机结构的已排序二叉查找树,它保存了值 k2k3k, …, 10k

创建一个新的信道 ch 并且对其进行步进:

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

然后从信道中读取并打印 10 个值。应当是数字 1, 2, 3, ..., 10

3. 用 Walk 实现 Same 函数来检测 t1 和 t2 是否存储了相同的值。

4. 测试 Same 函数。

Same(tree.New(1), tree.New(1)) 应当返回 true,而 Same(tree.New(1), tree.New(2)) 应当返回 false

Tree 的文档可在这里找到。

++++++++++++++++++++++++++++++++++++++++++++++++++++

翻译: 中序遍历二叉树到通道,再逐个比较

package main

import "golang.org/x/tour/tree"

import "fmt"


// Walk 步进 tree t 将所有的值从 tree 发送到 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 检测树 t1 和 t2 是否含有相同的值。
func Same(t1, t2 *tree.Tree) bool{
  ch1 := make(chan int, 10)
  ch2 := make(chan int, 10)
  go Walk(t1,ch1)
  go Walk(t2,ch2)
  list1 := [10]int{}
  for i:=0; i <10;i++{
	v1 := <- ch1
   list1[i] =v1
  }
  for i:=0; i <10;i++{
   v2 := <- ch2
   if v2 != list1[i]{
    return false
	}
  }
  return true

}

func main() {
 fmt.Println( Same(tree.New(1), tree.New(2)))
}

0 0 投票数
文章评分
订阅评论
提醒
guest

1 评论
最旧
最新 最多投票
内联反馈
查看所有评论
刘yyy
刘yyy
5 月 前

要求用并发,你这样和依次遍历两个树没区别,参考下面这样:

func Same(t1, t2 *tree.Tree) bool{
	ch1 := make(chan int, 10)
	ch2 := make(chan int, 20)
	go Walk(t1, ch1)
	go Walk(t2, ch2)
	for i:=0; i <10;i++{
		v1 := <- ch1
		v2 := <- ch2
		if v2 != v1{
    		return false
		}
  	}
  	return true
}
1
0
希望看到您的想法,请您发表评论x