2 回答
TA贡献1821条经验 获得超6个赞
好吧,我终于知道你到底在问什么了。
New()
方法返回一个值,而不是指针,这意味着您看不到调用者以后的更改。调用者得到的只是 Node.js 的一个值副本。所以你打印的父级将永远是{Left:<nil> Right:<nil> Value:2}
。
所以和addLeftNode()
一样addRightNode()
。
只需使用指针,而不是价值来实现您的目标。
我认为这只是Visit()
问题所在的方法。
当您在访问左孩子后立即返回时,它永远不会访问右孩子。
左右孩子不互斥,所以第二个 if 子句不应该使用
else if
,应该是if
。访问顺序也有问题。
前:
// Visit will automatically walk through the Child Nodes of the accessed Parent Node.
func (parent *Node) Visit() (Node, int) {
fmt.Println("Node value:", parent.Value)
if parent.hasLeftNode() {
return parent.Left.Visit()
} else if parent.hasRightNode() {
return parent.Right.Visit()
}
return *parent, parent.Value
}
修改的:
// Visit will automatically walk through the Child Nodes of the accessed Parent Node.
func (parent *Node) Visit() (Node, int) {
if parent.hasLeftNode() {
parent.Left.Visit()
}
fmt.Println("Node value:", parent.Value)
if parent.hasRightNode() {
parent.Right.Visit()
}
return *parent, parent.Value
}
另外,对我来说,Visit()不应该返回任何值。
TA贡献1856条经验 获得超17个赞
前:
// Visit will automatically walk through the Child Nodes of the accessed Parent Node.
func (parent *Node) Visit() (Node, int) {
fmt.Println("Node value:", parent.Value)
if parent.hasLeftNode() {
return parent.Left.Visit()
} else if parent.hasRightNode() {
return parent.Right.Visit()
}
return *parent, parent.Value
}
修改的:
// Visit will automatically walk through the Child Nodes of the accessed Parent Node.
func (parent *Node) Visit() (Node, int) {
if parent.hasLeftNode() {
parent.Left.Visit()
}
fmt.Println("Node value:", parent.Value)
if parent.hasRightNode() {
parent.Right.Visit()
}
return *parent, parent.Value
}
另外,对我来说,Visit()不应该返回任何值。
- 2 回答
- 0 关注
- 185 浏览
添加回答
举报