【发布时间】:2014-02-28 01:48:44
【问题描述】:
验证二叉树是否为 BST 的最佳算法如下所示
IsValidBST(root,-infinity,infinity);
bool IsValidBST(BinaryNode node, int MIN, int MAX)
{
if(node == null)
return true;
if(node.element > MIN
&& node.element < MAX
&& IsValidBST(node.left,MIN,node.element)
&& IsValidBST(node.right,node.element,MAX))
return true;
else
return false;
}
这个逻辑的空间复杂度显然是O(logN),我假设这是递归的成本。价值是如何得出的?
【问题讨论】:
-
除了方法变量和返回值之外,没有使用额外的数据,所以确实,所有的内存都是“递归成本”。因此,总成本将与树的深度成线性比例。在一个平衡二叉搜索树中,深度是
O(log n),所以实际上,空间复杂度也是O(log n)。但是,通常 BST 不一定是平衡的,它甚至可以是长度为n的链,如果根是最小的,它的右孩子是第二小的元素,依此类推。在这种情况下,这个递归的空间复杂度是O(n)。 -
@Heuster 好评论,但它确实应该是答案。
-
这个问题与c或c++有什么关系?你用什么语言在这里有什么关系吗?
-
@user694733 我猜你是对的 :-)
-
注意:如果每个节点都有一个指向其父节点的指针,则可以在 O(1) 中完成,因为您可以在不维护堆栈的情况下进行迭代。所以它完全取决于如何二叉树的表示。
标签: c++ c algorithm binary-search-tree