老师,找到node.left为空的节点之后 那句代码是删除最小节点的呢

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

慕运维8677934

2019-07-06

图片描述
老师这段代码有点理解不了 找到node.left为空的节点之后 那句代码是删除最小节点的呢

写回答

1回答

liuyubobobo

2019-07-07

return rightNode; 在整棵二分搜索树中删除了当前找到的这个最小节点node。因为,return的节点跳过了node,直接返回当前node的右节点,到递归的上一层。


在递归的上一层,node.left = removeMin(node.left);接住的不再是原来的node,而是原来node的右节点,删除掉了原来的node。


注意,你给的代码,下面的递归调用,没有 node.left = 这个赋值。这个赋值是删除的核心。只调用removeMin(node.left);达不到删除的目的。


其实,这个过程其实和我们之前课程介绍的链表删除是一模一样的。回忆一下,我们在讲链表删除的时候,微观解读中,是怎么做到删除那个节点的?


也可以在参考一下这个问答,以及这个问答下其他相关问答,再仔细理解一下:)

http://coding.imooc.com/learn/questiondetail/112584.html 


继续加油!:)

0
3
无心铁憨憨
回复
liuyubobobo
特意照着后面的测试方式测试了一下,才敢过来回答,没有问题:)
2019-07-10
共3条回复

玩转数据结构

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

6221 学习 · 1704 问题

查看课程