波波老师,我对删除最大或者最小值得递归终止条件中的代码有疑惑
来源:1-13 删除二分搜索树的最大元素和最小元素
慕前端5229000
2021-03-11 20:20:39
// 这里以删除最小值的终止条件为例子
if (node.left == null) {
Node rightNode = node.right;
node.right = null;
size--;
return rightNode;
}
我感觉能去掉上面两行,直接下面两行就行了:
if (node.left == null) {
size--;
return node.right;
}
因为两种方法返回的都是当前节点的右子树,而老师这种方法相当于把当前node的右子树设置成了空。而当前递归调用结束后,返回值会成为父节点的左子树(父节点的left不再指向当前的node),所以当前的node是不会被任何节点引用的,因此不管当前节点引用的右子树是否为空,都会被垃圾收集器回收,所以我认为下面两句是没有必要的:
Node rightNode = node.right;
node.right = null;
老师您觉得我的想法有什么问题嘛~
1回答
liuyubobobo
2021-03-11
没有问题,是的这样的:)
其实课程在讲链表的删除的时候,也有类似的代码段,那会儿介绍过,这个“将待删除节点和链表手动断开不是必须”,后续我们实现递归的链表删除,也不再手动置空了。
这里是同理的。赞思考。
继续加油!:)
相似问题