波波老师,我对删除最大或者最小值得递归终止条件中的代码有疑惑

来源: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

没有问题,是的这样的:)


其实课程在讲链表的删除的时候,也有类似的代码段,那会儿介绍过,这个“将待删除节点和链表手动断开不是必须”,后续我们实现递归的链表删除,也不再手动置空了。


这里是同理的。赞思考。


继续加油!:)

1

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2603 学习 · 1086 问题

查看课程