O(log n)中的二进制搜索树?

时间:2017-08-25 09:06:48

标签: tree binary-search-tree computer-science complexity-theory

给定一个包含n个节点的二叉树,是否可以在O(log n)时间复杂度中检查给定树是否为BST?

1 个答案:

答案 0 :(得分:0)

如果n是节点数量,那么不,因为你需要至少查看一次所有值,所以至少需要O(n)。但是如果你将n定义为特殊的东西,比如你可以实现的总树数。 (然而这样做有点愚蠢,因为如果你有100美分而不是1欧元,那就像说你有更多钱一样。它可能看起来更令人印象深刻,但也很奇怪,没有附加价值,这只是令人困惑和正常人一起工作不要这样做)

这是O(n)算法:如果它是BST,那么左右树都是BST,其中所有值都在某个最小值和最大值之间,因此您可以创建一个递归方法像这样:

public boolean isBST(subtree, minvalue, maxvalue){
    root=root of subtree;
    if(root>maxvalue || root<minvalue) return false;
    if(has left child)
        if(!isBST(left-child-tree, minvalue, rootvalue)) return false;
    if(has right child)
        if(!isBST(right-child-tree, rootvalue, maxvalue)) return false;
    return true;
}

并使用isBST(tree,-infinity,+ infinity)调用此方法。这是伪代码,当然可以更好地实现。