noTree的traverse调用不是应该成为递归循环吗?
来源:4-1 结构体和方法

阿憨阿憨
2018-12-30
老师能不能解释一下, 这里调用traverse,不是应该成为递归回调的死循环吗?
是不是因为
//创建节点
type TradeNode struct {
value int
left, right *TradeNode
}
//遍历节点内容
func (node *TradeNode) traverse() {
if node == nil {
return
}
node.left.traverse()
node.print()
node.right.traverse()
}
func main(){
var root TradeNode
//将节点的value设置为3
root = TradeNode{value: 3}
//将节点内存地址赋值给节点的左子树
root.left = &TradeNode{}
//将节点内存地址赋值给节点的右子树,同时赋值
root.right = &TradeNode{5, nil, nil}
root.right.left = new(TradeNode)
root.left.right = CreateNode(2)
root.right.left.setValue(4)
root.traverse()
}
写回答
1回答
-
我们看node.left.traverse()。node.left的值不是node本身,而是它的下一层。node.left.left是更下一层。一直这样递归下去最终会碰到有人left=nil,再继续就是调用了nil指针的traverse。那么我们一上来判断了如果node是空,那么要return。
于是又会一路return回去。
012019-01-13
相似问题
函数闭包递归的问题。
回答 4
这样写为什么会造成死循环
回答 3