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

来源:6-11 删除二分搜索树的最大元素和最小元素

慕运维8677934

2019-05-07

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

写回答

2回答

liuyubobobo

2019-05-07

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


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


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


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


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


加油!:)

0
1
慕运维8677934
非常感谢!波波老师 回去看了两遍明白了
2019-05-08
共1条回复

江景又妍和

2019-05-07

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

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

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

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

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


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

我的理解,嘻嘻 :)

1
1
慕运维8677934
谢谢你 我会好好研究的
2019-05-07
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程