当结构在接收器方法中称为指针时,是否会对其进行修改?

我正在尝试在 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>

据我所知,如果结构指针用于方法,则不会进行复制。在这种情况下,修改应保持不变。


我在这里错过了什么?


暮色呼如
浏览 79回答 1
1回答

慕妹3242003

这是我的事情一个最简单的解决方案,你可以做,我希望它不言自明type Bin struct {&nbsp; &nbsp; left, right *Bin&nbsp; &nbsp; value&nbsp; &nbsp; &nbsp; &nbsp;int}func New(value int) *Bin {&nbsp; &nbsp; return &Bin{value: value}}func (b *Bin) Insert(value int) {&nbsp; &nbsp; if value <= b.value {&nbsp; &nbsp; &nbsp; &nbsp; if b.left == nil {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b.left = New(value)&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b.left.Insert(value)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; if b.right == nil {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b.right = New(value)&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b.right.Insert(value)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go