关于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,新建了一个节点。
但是在玩转数据结构的课程中,没有真正从内存中删掉右子树最小值的节点,而是那这个节点做重新连接。
继续加油!:)
00
相似问题