关于successor

来源:5-8 二分搜索树节点的删除(Hubbard Deletion)

tobeabee

2021-10-16

老师,在java版本的对successor赋值时,并不需要事先重载一个Node的构造函数,请问这两种编程语言在这里为什么会有这个区别呢?我有点混淆

写回答

1回答

liuyubobobo

2021-10-16

我不确定你说的重载一个构造函数是什么意思。如果你是指这句话的话:

Node *successor = new Node(minimum(node->right));


这句话不要重载构造函数,这是创建了一个新的 Node 节点,赋值给 successor。


实际上,这不是编程语言的区别,是实现上的不同,使用 Java 也可以这样写,参考这个课程的 Java 代码实现:https://git.imooc.com/coding-71/coding-71/src/master/05-Binary-Search-Tree/Course%20Code%20%28Java%29/08-Binary-Search-Tree-Remove/src/bobo/algo/BST.java 

295 行。


我在玩转数据结构的课程里,对这里做了一个优化,这个课程中,相当于先将右子树的最小值的节点删去,再以这个最小值做 key,新建了一个节点。

但是在玩转数据结构的课程中,没有真正从内存中删掉右子树最小值的节点,而是那这个节点做重新连接。


继续加油!:)


0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程