Tree 二进制搜索树在O(logn)中?

Tree 二进制搜索树在O(logn)中?,tree,binary-search-tree,computer-science,complexity-theory,Tree,Binary Search Tree,Computer Science,Complexity Theory,给定一个有n个节点的二叉树,是否可以检查给定的树是否为BST,时间复杂度为O(log n)?如果n是节点数,则为否,因为您需要至少查看一次所有值,因此至少需要O(n)。但是如果你把n定义为一些特殊的东西,比如子树的总量,你就可以做到这一点。(然而,这样做有点愚蠢,因为这有点像是说如果你有100美分而不是1欧元,你就有更多的钱。这可能看起来更令人印象深刻,但也很奇怪,没有附加值,与之合作令人困惑,而正常人不会这样做) 这里是O(n)算法:如果它是BST,那么左树和右树都是BST,其中所有的值都在某

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

如果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(子树、minvalue、maxvalue){ 根=子树的根;
如果(root>maxvalue | | rootI)我认为这个问题更适合?你也可以在这里看到不同版本的O(n)算法: