如何在平衡的二叉搜索树中保持最小值和最大值花费O(1)时间,而不用指针捣乱?

Jac*_*ale 6 algorithm data-structures

"算法设计手册"一书中的消息3-7说:

假设您可以访问平衡字典数据结构,该结构支持O(log n)时间内的每个操作搜索,插入,删除,最小,最大,后继和前任.解释如何修改插入和删除操作,使它们仍然采用O(log n),但现在最小和最大需要O(1)时间.(提示:考虑使用抽象字典操作,而不是使用指针等等.)

没有提示,我认为这个问题相当容易.

这是我的解决方案:

对于树,我只保持指针min总是指向最小值,另一个指针max总是指向最大值.

插入x时,我只需将min.key与x.key进行比较if min.key > x.key, then min = x;,如果需要,也可以将此值设为max.

删除x时, if min==x, then min = successor(x); if max==x, then max = predecessor(x);

但暗示说我不能捣乱指针之类的东西.我的解决方案是否与指针混淆?

如果我们不能使用加分,我怎样才能得到O(1)的最小值和最大值?

谢谢

Blu*_*eft 1

你的答案与我给出的答案相同 - 你没有弄乱指针,你只是存储最小/最大值。

所以,要更有信心:)