采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
假如我们删除42的节点,42的节点左子树,右子树都是空
那么它肯定走第一张图中的方法,返回的是node.right 可是node.right不是null吗,那么返回的就是null?
之前返回的不都是当前要删除的节点吗? 如果返回的是当前要删除的节点,那么会什么root 等于这个要删除的节点?
这个函数的语义返回的不是待删除的节点,而是返回删除节点后,新的二分搜索树的根节点。
所以,要删除42,返回的空,是指,以42为根节点的二分搜索树,删除42以后,剩下的是一棵空树。
这棵空树,传给了他的父亲节点,也就是50的左子树,完成了删除动作:
之后50这个节点是把自己返回回去,而不是这个空。也就是50-42-53这棵以50为根的二分搜索树,删除掉42以后,新的二分搜索树的根节点,还是50,返回了回去。
整个过程以此类推。
其实,这个过程,和我们前面讲的链表的递归删除,是非常像的,可以在参考这个问答:https://coding.imooc.com/learn/questiondetail/70176.html,结合前面讲解的链表的递归删除过程,尤其是微观语义,理解一下整个程序是如何执行的:)
加油!:)
感谢老师,我又想了想,突然明白了。还是对递归掌握的不是很熟练
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
10.4k 16
1.4k 17
1.4k 14
1.3k 14