在给定范围内打印BST键

时间:2013-02-23 14:39:48

标签: algorithm runtime

我试图理解在给定范围内打印BST键的运行时间。 我试图从this example了解它,但我不能。

我想我明白了O(log n)的来源。这是通过递归方式通过BST,每个方面需要O(log n),但我不确定:

  1. K的来源。它只是打印所需的恒定时间吗?如果是,为什么运行时不是O(log n) + O(k),而是忽略K

  2. 来自顺序遍历的O(n)在哪里?因为它不在此运行时中。

  3. 如果我们在树的每一侧有多个值,那么运行时将如何变化。例如,如果范围是4?

  4. 怎么办?

1 个答案:

答案 0 :(得分:2)

理解解决方案的一种更简单的方法是考虑以下算法:

  1. 在BST树中搜索大于密钥k1的最小值 - O(lgn)
  2. 从k1执行BST树节点的有序遍历,直到我们到达小于或等于k2的节点,并打印它们的密钥。因为完整BST的有序遍历需要O(n)时间,如果k1和k2之间有k个键,则有序遍历将花费O(k)时间。
  3. 给定的算法做同样的事情;搜索k1和k2之间的密钥需要O(lgn)时间,而打印仅针对k1和k2范围内的k个键(O(k))进行。如果所有BST键都在k1和k2之内,则运行时将为O(lgn)+ O(n)= O(n),因为需要打印所有n个键。