【问题标题】:Binary Search Tree in O(log n)?O(log n)中的二叉搜索树?
【发布时间】:2017-08-25 09:06:47
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

如果 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) 调用这个方法。这是伪代码,当然可以更好地实现。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多