将结构被修改时,在接收方法它被称为指针?

  • 本文关键字:方法 被称为 指针 结构 修改 go
  • 更新时间 :
  • 英文 :


我正在尝试在Go中实现树。

type BinaryNode struct {
left  *BinaryNode
right *BinaryNode
data  int
}
type BinaryTree struct {
root *BinaryNode
}

现在插入元素,我有一个插入函数

func (t *BinaryNode) insertNode(d int) {
fmt.Printf("%+vn", t)
if t == nil {
t = &BinaryNode{
data:  d,
left:  nil,
right: nil,
}
fmt.Printf("%+v inside insertn", t)
} else {
if d <= t.data {
t.left.insertNode(d)
} else {
t.right.insertNode(d)
}
}
}

如果指针为空,创建一个新的节点,如果不是查找左或右,根据数据。在我的主函数中,我正在尝试简单的几个步骤:

func main() {
tree1 := &BinaryTree{
root: nil,
}
tree1.root.insertNode(3)
fmt.Printf("%+vn", tree1.root)
}

我期望看到的是根值为3的树。但是我没有看到。而是得到:

<nil>
&{left:<nil> right:<nil> data:3} inside insert
<nil>

根据我的理解,如果struct指针用于方法,则不会进行复制。在这种情况下,修改应该保留。

我在这里错过了什么?

这是你能做的最简单的解决方案,我希望它不言自明

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)
}
}
}

最新更新