当不满足任何条件时,二进制搜索树中的contains方法如何返回false?

时间:2018-07-30 01:52:16

标签: scala

我有一个用于类的方法,该方法使用二进制搜索树数据结构实现一组整数。其中一种方法是contains方法,如果一组包含给定的整数,则该方法返回true

下面两种方法的实现都是正确的,但是我试图理解为什么要这样做:

def contains(x: Int): Boolean =
    if (x < elem) left.contains(x)
    else if (elem < x) right.contains(x)
    else true
与穷举和用这种方式做相比,

足够了:

def contains(x: Int): Boolean =
    if (x < elem) left.contains(x)
    else if (elem < x) right.contains(x)
    else if (elem == x) true
    else false

如果整数不属于集合,第一种方法中的方法返回false的直观原因是什么?

2 个答案:

答案 0 :(得分:1)

始终构造二叉搜索树,以使左分支的元素小于节点值elem,而右分支元素均大于elem

如果您的x既不小于也不大于elem,则遵循此逻辑,您只有一种可能性:它等于elem。因此,无需测试是否相等,第二个实现的else false将永远是无效分支。

这样想:如果您使用两个数字,而两个数字都不小于或大于另一个,则它们必须是相同的数字。

答案 1 :(得分:1)

您应该保持可疑,因为看来结束递归的唯一方法是返回true

但是我认为您会发现树对于节点元素和叶元素具有不同的类。您显示的是节点的contains方法。叶子的contains方法将仅返回false,从而结束递归操作。

或者,leftright可能是Option[Node]。在这种情况下,如果falseOption,则会得到None,因为None.contains(_)始终是false