老师你好,本视频11:55中为什么说node.right = null;操作可以删除node节点?

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

GGGJH

2018-09-24

实际上,我并不清楚删除node节点的操作是在哪一步发生的。
同时,我在参考书上看到的删除操作的关键是先找到pre节点,但在本节中我们编写的代码是否没有涉及到pre节点呢?

写回答

1回答

liuyubobobo

2018-09-24

删除操作先要找到pre节点,是非递归算法的写法。由于在这一章,我们使用的都是递归算法,所以不牵扯找pre节点。回忆一下,在4-5我们介绍的链表删除节点的时候,由于是非递归算法,所以需要找pre节点。


在我们实现的二叉树的递归删除的过程中,删除实际发生的方式,和我们在5-3至5-5所介绍的链表删除操作的递归算法中删除发生的方式是一模一样的。尤其是我们在5-5所介绍的递归过程的微观运行机制。强烈建议再看一遍,之后再回过头,思考一下这一小节的代码中,我们的二叉树的删除发生在什么时候?发生的时机是完全一致的!


当然,有兴趣,也强烈建议自己尝试写一个二叉树删除最大节点或者最小节点的非递归算法,再仔细体会一下递归算法和非递归算法的不同:)


加油!:)

0
4
GGGJH
回复
liuyubobobo
好的,谢谢老师 :)
2018-09-24
共4条回复

玩转数据结构

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

6221 学习 · 1704 问题

查看课程