请稍等 ...
×

采纳答案成功!

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

老师 这边代码 removeMin()返回的删除的元素值 为什么还要在removeMin(Node node)返回根节点

老师
这段代码一直在调用removeMin(node.right)在最后if(node.right==null)中停止,他可以返回根节点,但是在代码最后又返回了node,我的理解是在if中返回的是删除元素所在二叉树的根节点,最后的返回是整个树的root,这两个返回在什么时候

正在回答

2回答

liuyubobobo 2019-05-07 17:25:35

@qq_江景又妍和_0 的回答完全正确:)


如果node.left == null的时候,return回的是rightNode,后面的代码就不会执行了。


但是,如果node.left不等于null,if里面的逻辑不会走,最后就会返回node:)


实际调试跟踪一下,看一看removeMin的具体执行过程是怎样的。


注意:由于递归函数是嵌套执行的,在具体调试跟踪的时候,一定要明确当前递归函数的参数node是谁:)


加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕运维8677934 #1
    非常感谢!波波老师  回去看了两遍明白了
    回复 有任何疑惑可以回复我~ 2019-05-08 16:25:59
江景又妍和 2019-05-07 16:48:08

我认为这是一个对于递归理解的问题。 

node.left = removeMin(node.left); 这行代码递归调用了removeMin,返回的也就是每次删除节点后,它所在的那个树的根。

另外,每次的递归确实在if(node.right==null)中停止,但是他返回的节点是返回给 node.left = removeMin(node.left); 这个语句中的node.left的,并不是直接返回给root的

最后代码返回了node,也就是返回了删除节点后,这整个二叉搜索树的根,也就是从始至终返回给调用removeMin这个函数的都只是整个二叉搜索树的根node

中间的if判断中返回的是给中间递归调用的函数的


觉得你可以把前面的链表和递归那一章重新再看一下  

我的理解,嘻嘻 :)

1 回复 有任何疑惑可以回复我~
  • 提问者 慕运维8677934 #1
    谢谢你  我会好好研究的
    回复 有任何疑惑可以回复我~ 2019-05-07 17:10:41
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号