我正在研究一个项目,该项目需要我使用search.h中的glibc函数创建并经常搜索RB树。 我创建树或搜索树都没有问题;但是,我只是找不到在O(log n)时间中找到树的最大值的方法。 AFAIK正确的方法是一直走到树的右翼直到第一片叶子为止。我真的不知道如何实现它。
答案 0 :(得分:3)
创建树或搜索树都没有问题;但是,我只是 无法找到一种方法来找到树的最大值 O(log n)时间。 AFAIK正确的方法是一直走下去 树的右翼直到第一片叶子;我真的不能 弄清楚如何实现。
恐怕你不走运。 (POSIX)search.h
的树操作功能没有提供直接服务于find-maximum(或find-minimum)操作的接口,并且它们用来表示树的内部数据结构未公开,因此您无法手动实施通常的方法。您可以使用twalk()
找到最大值,但这样做将需要遍历整个树,因此将缩放为O(n)。尽管深度优先行走将在O(log n)步中达到最小值,但即使找到最小值也将花费O(n),因为它不会在那里停止。