我正在嘗試在 Go 中實現(xiàn)一棵樹。type BinaryNode struct { left *BinaryNode right *BinaryNode data int}type BinaryTree struct { root *BinaryNode}現(xiàn)在要插入元素,我有一個插入函數(shù),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,則根據(jù)數(shù)據(jù)創(chuàng)建一個新節(jié)點(如果不是,則查找左側(cè)或右側(cè))。在我的主要功能中,我正在嘗試簡單的幾個步驟: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>據(jù)我所知,如果結(jié)構(gòu)指針用于方法,則不會進行復(fù)制。在這種情況下,修改應(yīng)保持不變。我在這里錯過了什么?
1 回答

慕妹3242003
TA貢獻1824條經(jīng)驗 獲得超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 關(guān)注
- 97 瀏覽
添加回答
舉報
0/150
提交
取消