请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答

1回答

因为整个函数定义了返回值,且 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 回复 有任何疑惑可以回复我~
  • 提问者 慕运维6075306 #1
    太感谢波波老师了,我理解了!这句确实不可或缺
    回复 有任何疑惑可以回复我~ 2021-08-29 16:32:38
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信