如何在二叉搜索树中进行下限?

时间:2011-11-29 16:43:39

标签: algorithm scala data-structures binary-search-tree

当我在二进制搜索树中给出一些整数时,我做了最接近的下界

  def lowerBound(x : Int) : Int = {
    var t = root
    var result : Int = 0
    while(t.key != x) {
        if(x == t.key) {
            result = t.left.key
        }
        else{
          if(x < t.key) {
            t = t.left
            if(t == null) {
                throw new NoSuchElementException     
            }
            else {
                result = t.key
            }
          }
          else {
            t = t.right
          }
        }
  }
  result
}
我是这样做的。但它不会打印任何结果。 T T .... 是我的算法中的任何反例?

如果有{2,3,5,7,8,10,99} lowerBound(6)是5。

1 个答案:

答案 0 :(得分:2)

作业?

然后只需几点:

  • 您只能使用t.key == x成功退出循环,因此除非x在树中,否则无法成功返回。听起来不对。
  • 如果在某些时候你选择了正确,那么你知道树中至少有一个值小于x。所以,在你至少走了一次之后,有一个解决方案,你不应该失败。这不会出现在您的代码中。
  • 当你选择向右走时,那里可能没有数据,你应该检查一下。
  • 画一个小BST并在图纸上检查你的想法,这应该有很多帮助。

另外

  • 确定你的计算结果。小于或等于x的最大元素,或严格小于x?
  • 也许您可以尝试递归实现。