我正在尝试在Go中实现树。
type BinaryNode struct {
left *BinaryNode
right *BinaryNode
data int
}
type BinaryTree struct {
root *BinaryNode
}
现在插入元素,我有一个插入函数
func (t *BinaryNode) insertNode(d int) {
fmt.Printf("%+vn", t)
if t == nil {
t = &BinaryNode{
data: d,
left: nil,
right: nil,
}
fmt.Printf("%+v inside insertn", t)
} else {
if d <= t.data {
t.left.insertNode(d)
} else {
t.right.insertNode(d)
}
}
}
如果指针为空,创建一个新的节点,如果不是查找左或右,根据数据。在我的主函数中,我正在尝试简单的几个步骤:
func main() {
tree1 := &BinaryTree{
root: nil,
}
tree1.root.insertNode(3)
fmt.Printf("%+vn", tree1.root)
}
我期望看到的是根值为3的树。但是我没有看到。而是得到:
<nil>
&{left:<nil> right:<nil> data:3} inside insert
<nil>
根据我的理解,如果struct指针用于方法,则不会进行复制。在这种情况下,修改应该保留。
我在这里错过了什么?
这是你能做的最简单的解决方案,我希望它不言自明
type Bin struct {
left, right *Bin
value int
}
func New(value int) *Bin {
return &Bin{value: value}
}
func (b *Bin) Insert(value int) {
if value <= b.value {
if b.left == nil {
b.left = New(value)
} else {
b.left.Insert(value)
}
} else {
if b.right == nil {
b.right = New(value)
} else {
b.right.Insert(value)
}
}
}