在Golang tour的并发部分有一个练习如下。 problem statement想要验证两个输入树是否相同。
这里的问题是当我们将遍历顺序从顺序更改为前/后顺序时失败。即波纹管代码工作正常
if t != nil {
traverse(t.Left, ch)
ch <- t.Value
traverse(t.Right, ch)
}
但是如果我们首先将值放入 channel 然后转到节点的子节点,它的答案就会出错(运行 this 和 this 对于输出不同的相同输入)。
由于我们使用相同的代码来遍历其预期的顺序应该无关紧要(即值以相同的顺序进入 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/