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

nam*_*ame 4 algorithm

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

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

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

kra*_*ich 5

这个算法不错。事实上,它在时间复杂度方面是最优的3 * k,因为它访问了大多数节点,其中k是满足给定条件的节点的数量(这种情况是因为只有当节点或其父节点满足条件时才会访问该节点)。

是的,这是O(N)最坏的情况。但是您无法做得更好,因为您可能需要打印堆中的所有节点。