二叉树insertNode递归未赋值子节点仅插入根节点问题咨询
问题原因
这个问题是参数值传递规则导致的,具体逻辑如下:
- 你当前的
insertNode采用「返回处理后节点」的实现逻辑,当你只调用insertNode(node.leftChild, key)、不接收返回值时,实际传入函数的是node.leftChild当前值的拷贝:如果对应子节点当前为空,你传入的就是null的副本,函数内部给形参赋值新节点的操作只会修改临时形参的值,完全不会修改父节点上真实的leftChild/rightChild属性,新节点根本没有挂载到二叉树结构上,自然只有根节点能插入成功。 - 当你显式执行
node.leftChild = insertNode(node.leftChild, key)时,是把函数返回的新节点直接赋值给父节点的对应子节点属性,才能把新节点真正接入二叉树的层级结构中,完成插入操作。
简化示例验证:假设父节点
A的leftChild当前为null,调用insertNode(A.leftChild, 10)后,A.leftChild仍然是null;只有执行A.leftChild = insertNode(A.leftChild, 10),A的左子节点才会被更新为新创建的节点。
如果你不想每次都写赋值逻辑,可以调整insertNode的实现:判断到子节点为空时,直接给当前节点的对应子属性赋值new Node(key),不需要返回节点,也就不需要外层接收赋值。
附问题对应的代码截图:
内容的提问来源于stack exchange,提问作者Austin Kunch
相关产品推荐
相关产品推荐

