我正在嘗試在 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 關注
- 94 瀏覽
添加回答
舉報
0/150
提交
取消