`
sqlxx
  • 浏览: 17642 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

A Tour of Go - Exercise: Equivalent Binary Trees

 
阅读更多

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.binary trees

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 thetreepackage, which defines the type:

type Tree struct {
	Left  *Tree
	Value int
	Right *Tree
}

1.Implement theWalkfunction.

2.Test theWalkfunction.

The functiontree.New(k)constructs a randomly-structured binary tree holding the valuesk,2k,3k, ...,10k.

Create a new channelchand 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 theSamefunction usingWalkto determine whethert1andt2store the same values.

4.Test theSamefunction.

Same(tree.New(1), tree.New(1))should return true, andSame(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)))
	
}


分享到:
评论

相关推荐

    java-leetcode题解之Flip Equivalent Binary Trees.java

    java java_leetcode题解之Flip Equivalent Binary Trees.java

    ISO-IEC-13818-1_2000_MPEG2_Systems.pdf

    - **配对建议/国际标准 (Paired Recommendations|International Standards equivalent in technical content)**:这些标准虽然不是完全相同的,但在技术内容上相当,可以作为参考。 - **额外引用 (Additional ...

    河南专升本英语温习资料.pdf

    这些形容词和介词的搭配是英语学习中不可或缺的部分,掌握它们能帮助你在专升本英语考试中更好地理解和运用语言,提高你的得分潜力。通过不断的复习和实践,你可以将这些搭配灵活运用到你的写作和口语表达中,提升...

    科技论文写作积累词汇

    - **Can be cast into the stability of a set of matrices of the same row dimension**:可以转换成同一行维矩阵集的稳定性问题。 - 示例:这个问题可以转换成同一行维矩阵集的稳定性问题。 - **It is shown ...

    小学数学英语词汇.doc

    - 比率:用"ratio"表示,"equals"或"is equivalent to"表示等于,"is approximate equal to"表示近似等于。 - 大小关系:"is greater than"表示大于,"is lesser than"表示小于,"is equal or greater than"表示...

    各种类型无线网络密码

    常见的无线网络密码类型有WEP(Wired Equivalent Privacy)、WPA(Wi-Fi Protected Access)以及最新的WPA3等标准。其中,WEP安全性较低,已不推荐使用;而WPA和WPA2相对更安全,特别是WPA3提供了更强的数据加密能力...

    go-sysctl:围绕sysctl接口进行包装

    用法 import sysctl "github.com/lorenzosaino/go-sysctl"var ( val string vals map [ string ] string err error)// Get value of a single sysctl// This is equivalent to running "sysctl &lt;key&gt;"val , err = ...

    Battery Management systems--Equivalent-circuit Methods

    - 在电池建模中,等效电路模型(Equivalent Circuit Model, ECM)是一种常用的方法,它简化了电池的复杂物理过程,用于近似电池的动态行为。这种模型通常包括电阻和电容元素,可以模拟电池的充电和放电特性,以及...

    滤镜问题-FireFox火狐浏览器与IE的对比分析

    - `*-moz-key-equivalent`: 设置快捷键。 - `*-moz-opacity`: 设置透明度。 - `*-moz-outline`: 设置轮廓线。 - `*-moz-outline-color`: 设置轮廓线颜色。 - `*-moz-outline-offset`: 设置轮廓线偏移。 - `*-...

    数学符号发音表(共12页很完整)

    9. **全等于号**:`≡` 发音为“equivalent to”或“identical”,国际音标分别为 /ɪk'wɪvələnttʊ/ 和 /aɪ'dentɪkltʊ/。 - 示例:“2 + 2 ≡ 4”读作 “two plus two is equivalent to four”。 10. **不...

    无线局域网认识和设备使用教材.zip

    - 标准:主要遵循IEEE 802.11系列标准,包括802.11a/b/g/n/ac/ax等,不同标准决定了传输速度和覆盖范围。 - 频谱:主要使用2.4GHz和5GHz频段,其中2.4GHz穿透力强但带宽有限,5GHz则提供更高的传输速率但穿透力较...

    go-ansi-parser:去解析器的ANSI字符串

    用于解析ANSI编码的字符串的库 Go ANSI Parser将带有字符串转换为代表样式文本的结构片段。 特征: ...// is the equivalent of... var text = [] * ansi. StyledText { { Label : "Hello Worl

    grunt-equivalent-asp.net-minification:由于我有这样一个痛苦的工作流程,相当于发布和开发的 ASP.net 缩小,我认为有人可能会从我的 gruntfile.js 中受益

    grunt-equivalent-asp.net-minification 作为来自 ASP.net Web 优化领域的 Grunt/bower 的新手,我在获得一个 grunt 工作流时遇到了很大的痛苦,该工作流与发布和开发版本的 ASP.net 缩小相当,所以我认为有人可能...

    Ramda-SQL-Equivalent:使用Ramda函数SQL等效操作-在Cities数据上创建JavaScript函数以复制Cities RDBMS(SQLite DB)表上的等效SQL操作

    等效于Ramda-SQL 使用Ramda函数SQL等效操作 在城市数据上创建JavaScript函数,以在城市RDBMS(SQLite DB)表上复制等效SQL操作。 资料详情 ./src/data/cities.json-(只读)具有以下属性的Cities对象: ...

    wikibase-tools:用于Wikibase的工具

    wikibase-docker工具参见...compose) 创建一个新的机器人帐户(在设置中使用USER和PASS ) 创建“等效属性”和“等效类”属性重新创建Wikidata中的所有属性,以及等效属性声明返回Wikidata(即equivalent property -&gt; ...

    数学常用符号及公式的英语读法

    - **x ∉ A**(不属于):`x does not belong to A` 或 `x is not an element (or a member) of A` - 例句:`-1 ∉ N` 可读作 "Minus one does not belong to the set of natural numbers." - **A ⊂ B**(子集)...

    coz-rs:对coz因果分析器的Rust支持,代码现在位于上游-https:github.complasma-umasscoz

    考斯 注意:此板条箱的官方来源现在建议使用它而不是此库,并在此处而不是在此处发布问题/更改。 对Rust支持 用法 首先,按照的说明安装coz命令。 接下来, coz是一个探查器,... // equivalent of `COZ_PROGRESS`

    精简产品简介开发项目设计表

    28-31:WBS、Refill、Equivalent、TaskName:工作分解结构(WBS)帮助项目管理,Refill和Equivalent用于替换件和等效产品的管理,TaskName则指明相关任务。 32-34:MaterielType、ProductType、ProductCategories:...

    大学英语四级重点词汇收录.docx

    37. **equivalent** - 相等的、相等物:在价值或意义上相当的。 38. **erect** - 竖直的、建筑:直立或建造起来的状态。 39. **fax** - 传真:通过电话线路传输文档的方式。 40. **fertile** - 肥沃的、多产的:形容...

    Gopro-Intern-Assignment:GoPro 的实习生分配

    Displays line, word, and byte count of input document.Line 2: Modified wc to ignore words in list "I We You They a and the that of for with". Displays line, word, and byte count of input document....

Global site tag (gtag.js) - Google Analytics