我正在尝试使用 astruct来管理树上的访问节点。每当我访问父节点的子节点的方法时,后续调用的父引用就会丢失(即parent.child.method(child) -> [parent becomes nil]-> parent(the previous child).child ... etc)。
这是我文件中的错误片段。
type Node struct {
Left *Node
Right *Node
value int
}
func (parent *Node) determineSide(child *Node) (Node, Node) {
if child.Value < parent.Value {
if parent.hasLeftNode() {
return parent.Left.determineSide(child)
}
return parent.addLeftNode(child)
} else if child.Value > parent.Value {
if parent.hasRightNode() {
return parent.Right.determineSide(child)
}
return parent.addRightNode(child)
}
return *child, *parent
}
我试图通过尝试找到一种方法来通知新引用应该是的方法来解决这个问题parent.Left。*parent.Leftusing和之类的东西&parent.Left似乎不正确。
一个解决方案可能是将此代码移出,struct并让另一个函数处理结果以进行快速修复,但我想了解为什么这不是开箱即用的。这里的思维过程受到使用的影响this.child.determineSide(child)。
完整代码在这里。