亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當結構在接收器方法中稱為指針時,是否會對其進行修改?

當結構在接收器方法中稱為指針時,是否會對其進行修改?

Go
暮色呼如 2022-08-09 12:54:26
我正在嘗試在 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)

        }

    }

}


查看完整回答
反對 回復 2022-08-09
  • 1 回答
  • 0 關注
  • 94 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號