go - 为什么将遍历从 In-order 更改为 Pre/Post-order 会使答案在 "Exercise: Equivalent Binary Trees"中出错?

标签 go concurrency

Golang tour的并发部分有一个练习如下。 problem statement想要验证两个输入树是否相同。

这里的问题是当我们将遍历顺序从顺序更改为前/后顺序时失败。即波纹管代码工作正常

if t != nil {
    traverse(t.Left, ch)
    ch <- t.Value
    traverse(t.Right, ch)
}

但是如果我们首先将值放入 channel 然后转到节点的子节点,它的答案就会出错(运行 thisthis 对于输出不同的相同输入)。

由于我们使用相同的代码来遍历其预期的顺序应该无关紧要(即值以相同的顺序进入 channel ...)。

PS:您可以在这个练习中找到更多答案 here .

最佳答案

这个问题的答案与数据结构相关,而不是 Golang 语法,并且与二叉搜索树属性有关。

正如文档所述tree.New func 返回一个随机构造的键:

New returns a new, random binary tree holding the values k, 2k, ..., 10k.

中序遍历 promise 对输出进行排序,但前序和后序遍历并非如此,因此这些遍历的输出将不相等。

考虑下面的树:

       4
      / \
     2   5
    / \
   1   3

InOrder遍历:1,2,3,4,5

后序遍历:1 3 2 5 4

更多信息:Binary Trees

关于go - 为什么将遍历从 In-order 更改为 Pre/Post-order 会使答案在 "Exercise: Equivalent Binary Trees"中出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50207120/

相关文章:

mongodb - 如何使用 mgo 从 golang 中的 mongodb 集合中选择所有记录

go - 使用 goLang 的 LDAP 身份验证

java - 当其他应用程序使用同一数据库时,JPA的并发性

C# 是否可以中断 ThreadPool 中的特定线程?

java - 我们可以创建同一个 java(spring) 批处理作业的多个实例吗?

html - net/html 解析文档,无论如何返回 nil *html.Node

google-app-engine - 在浏览器 : Golang 设置 Cookie

go - Protocol Buffer 使用枚举

java - 多任务运行器算法性能不佳

Ruby VM 并发性和并行性