我正在 Rosettacode.org 上查看有关树遍历的页面。我正在研究 Go 的实现,我对 Go 还很陌生,这就是为什么我需要你的帮助。
在文件的开头,创建了一个结构。没关系,到目前为止它是有道理的。但我不明白的是:
type node struct {
value int
left, right *node
}
的left, right *node一部分。我知道左、右变量是指向节点的指针类型。但我不明白为什么,首先我不知道你可以包含你正在创建的类型,在这种情况下是实际结构本身中的节点。然后我真的不明白为什么代码不只是说left, right node.
func (n *node) iterPreorder(visit func(int)) {
if n == nil {
return
}
visit(n.value)
n.left.iterPreorder(visit)
n.right.iterPreorder(visit)
}
我不明白的下一件事是,visit变量的类型如何func(int)。然后我也不知道如何iterPreorder在函数中使用iterPreorder。
最后我想问一下,这段代码有什么作用?
tree := &node{1,
&node{2,
&node{4,
&node{7, nil, nil},
nil},
&node{5, nil, nil}},
&node{3,
&node{6,
&node{8, nil, nil},
&node{9, nil, nil}},
nil}}
梵蒂冈之花
相关分类