老师您好,图一这里不写return是不是也行?图二中return node;的意义是什么
来源:5-7 删除最大值,最小值
慕运维6075306
2021-08-28
老师,我不理解,图二中,划线语句存在的意义?我理解的是,最终只会在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 有问题,看看问题发生在哪里?为什么出现了问题?自己哪里想错了?
这是学习算法,乃至是学习编程的非常重要的方式。
继续加油!:)
012021-08-29
相似问题