我正在尝试在 Go 中实现一棵树。type BinaryNode struct { left *BinaryNode right *BinaryNode data int}type BinaryTree struct { root *BinaryNode}现在要插入元素,我有一个插入函数,func (t *BinaryNode) insertNode(d int) { fmt.Printf("%+v\n", t) if t == nil { t = &BinaryNode{ data: d, left: nil, right: nil, } fmt.Printf("%+v inside insert\n", t) } else { if d <= t.data { t.left.insertNode(d) } else { t.right.insertNode(d) } }}如果指针为 nil,则根据数据创建一个新节点(如果不是,则查找左侧或右侧)。在我的主要功能中,我正在尝试简单的几个步骤:func main() { tree1 := &BinaryTree{ root: nil, } tree1.root.insertNode(3) fmt.Printf("%+v\n", tree1.root)}我期望看到的是根值为3的树。但我没有看到任何东西。相反,我得到:<nil>&{left:<nil> right:<nil> data:3} inside insert<nil>据我所知,如果结构指针用于方法,则不会进行复制。在这种情况下,修改应保持不变。我在这里错过了什么?
1 回答
慕妹3242003
TA贡献1824条经验 获得超6个赞
这是我的事情一个最简单的解决方案,你可以做,我希望它不言自明
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)
}
}
}
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报
0/150
提交
取消