采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
这段代码一直在调用removeMin(node.right)在最后if(node.right==null)中停止,他可以返回根节点,但是在代码最后又返回了node,我的理解是在if中返回的是删除元素所在二叉树的根节点,最后的返回是整个树的root,这两个返回在什么时候
@qq_江景又妍和_0 的回答完全正确:)
如果node.left == null的时候,return回的是rightNode,后面的代码就不会执行了。
但是,如果node.left不等于null,if里面的逻辑不会走,最后就会返回node:)
实际调试跟踪一下,看一看removeMin的具体执行过程是怎样的。
注意:由于递归函数是嵌套执行的,在具体调试跟踪的时候,一定要明确当前递归函数的参数node是谁:)
加油!:)
非常感谢!波波老师 回去看了两遍明白了
我认为这是一个对于递归理解的问题。
node.left = removeMin(node.left); 这行代码递归调用了removeMin,返回的也就是每次删除节点后,它所在的那个树的根。
另外,每次的递归确实在if(node.right==null)中停止,但是他返回的节点是返回给 node.left = removeMin(node.left); 这个语句中的node.left的,并不是直接返回给root的
最后代码返回了node,也就是返回了删除节点后,这整个二叉搜索树的根,也就是从始至终返回给调用removeMin这个函数的都只是整个二叉搜索树的根node
中间的if判断中返回的是给中间递归调用的函数的
觉得你可以把前面的链表和递归那一章重新再看一下
我的理解,嘻嘻 :)
谢谢你 我会好好研究的
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
11.2k 16
1.8k 17
1.6k 14
1.7k 14
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号