老师 这边代码 removeMin()返回的删除的元素值 为什么还要在removeMin(Node node)返回根节点
来源:6-11 删除二分搜索树的最大元素和最小元素
慕运维8677934
2019-05-07
这段代码一直在调用removeMin(node.right)在最后if(node.right==null)中停止,他可以返回根节点,但是在代码最后又返回了node,我的理解是在if中返回的是删除元素所在二叉树的根节点,最后的返回是整个树的root,这两个返回在什么时候
2回答
-
@qq_江景又妍和_0 的回答完全正确:)
如果node.left == null的时候,return回的是rightNode,后面的代码就不会执行了。
但是,如果node.left不等于null,if里面的逻辑不会走,最后就会返回node:)
实际调试跟踪一下,看一看removeMin的具体执行过程是怎样的。
注意:由于递归函数是嵌套执行的,在具体调试跟踪的时候,一定要明确当前递归函数的参数node是谁:)
加油!:)
012019-05-08 -
江景又妍和
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判断中返回的是给中间递归调用的函数的
觉得你可以把前面的链表和递归那一章重新再看一下
我的理解,嘻嘻 :)
112019-05-07
相似问题