一种算法,用于在二进制最大堆中查找大于某个值X的所有节点

时间:2016-10-27 16:17:10

标签: algorithm

这是我到目前为止所拥有的。

我们可以使用从堆的根开始的递归算法(因为根是最大数。然后我们将检查我们的X(我们正在寻找的)是否大于我们的根。如果X大于我们停止的根。如果不是,我们打印根然后我们检查它的左子和右孩子。等等...

这是一个很好的算法吗?我的算法的最坏情况时间复杂度也是O(N),其中N是堆中的节点数。

1 个答案:

答案 0 :(得分:3)

这个算法很好。实际上,它在时间复杂度方面最优,因为它访问最多3 * k个节点,其中k是满足给定条件的节点数(因为只有在访问节点时才会访问该节点)它满足条件或其父母的确)。

是的,在最糟糕的情况下是O(N)。但是你不能做得更好,因为你可能需要打印堆中的所有节点。