老师您好,图一这里不写return是不是也行?图二中return node;的意义是什么

来源:5-7 删除最大值,最小值

慕运维6075306

2021-08-28

图片描述
图片描述
老师,我不理解,图二中,划线语句存在的意义?我理解的是,最终只会在if语句的return leftNode中结束。因为node->right=removeMax(node->right)的存在,程序永远不会执行到最后一句。

写回答

1回答

liuyubobobo

2021-08-29

因为整个函数定义了返回值,且 124 行和 247 行都需要返回值:https://git.imooc.com/coding-71/coding-71/src/master/05-Binary-Search-Tree/Course%20Code%20%28C++%29/07-Binary-Search-Tree-Remove-Min-and-Max/main.cpp


最终确实会落在 return leftNode 中,但是,在这个执行链条里,每一个函数都需要返回值。之后最后一个节点,会执行 return leftNode,其他节点都在执行 return node。


在 node->right = reomveMax(node->right) 一句话中,相当于在说:

如果 node->right 没有右节点了,那么 node->right 就接 node->right 的左节点就好了。(return leftNode 在起作用)

否则,node->right 还是接原先的这个节点(return node 在起作用。)


return node 会执行,你可以打一个断点试试看。


这个问题还是很重要的。我强烈建议你:

1)按照你的想法,没有返回值,实现一下,看看是否有问题?(实际上,由于整个函数定义了返回值,你必须 return 一个东西。

但在最后 return NULL 是错误的。如果按照你说的,最后的 return node 不会执行的话,return NULL 就没问题。

2)用小数据量跟踪一下,如果 return NULL 有问题,看看问题发生在哪里?为什么出现了问题?自己哪里想错了?


这是学习算法,乃至是学习编程的非常重要的方式。


继续加油!:)

0
1
慕运维6075306
太感谢波波老师了,我理解了!这句确实不可或缺
2021-08-29
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程