节点删除的问题

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

易萧

2017-06-13

为什么要建立新的节点呢,可不可以直接复制删除呢,如下:

Node *successor = minimum(node->right);
successor->left = node->left;
successor->right = node->right;
delete node;
return successor;

这么做可能使successor的前驱和后继断开了。可以设置一个前驱指针,写一个内置的最小值查找来代替minimum吧,删除的时候只增加一句prev->right = successor->right;

写回答

1回答

liuyubobobo

2017-06-15

赞!不建立新的节点是完全可以的。


但就像你后面补充的内容一样,还有一些细节需要处理。在课程中,我以讲清楚Hubbard Deletion的逻辑为主,尽量复用之前的代码。但这确实不是最优的实现。有兴趣可以自己亲自实现一下这个思路哦:)

0
1
易萧
非常感谢!
2017-06-16
共1条回复

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

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

11187 学习 · 1614 问题

查看课程