BST 的 space 复杂度是多少?
What is the space complexity of BST?
function validateBst(root, min=-Infinity, max=Infinity) {
if (!root) return true;
if (root.value <= min || root.value > max) return false;
return validateBst(root.left, min, root.value) && validateBst(root.right,root.value, max)
}
有人可以为我澄清一下吗...这个函数的 space 复杂度是 O(log(n)) 还是 O(d) - 其中 d 是 BST 树的深度?
...我可以把它们归为一类吗?
Space 树本身的复杂度与树中的节点数成正比。因此,O(N)
Space 函数的复杂度 validateBst
是分配给递归搜索整个树的最大“堆栈”内存量(函数调用开销)。
最大堆栈量实质上是树从根节点到最下方叶节点的高度。 在平均情况下(和最佳情况下) - 假设一棵树相当平衡,那么高度约为 log₂ N
。因此,space 复杂度将是 O(log₂ N)
或简单地 O(lg N)
在 最坏情况 场景中,树只是一个排序的链表分支递增值,然后 O(N)
作为最坏的情况。
function validateBst(root, min=-Infinity, max=Infinity) {
if (!root) return true;
if (root.value <= min || root.value > max) return false;
return validateBst(root.left, min, root.value) && validateBst(root.right,root.value, max)
}
有人可以为我澄清一下吗...这个函数的 space 复杂度是 O(log(n)) 还是 O(d) - 其中 d 是 BST 树的深度?
...我可以把它们归为一类吗?
Space 树本身的复杂度与树中的节点数成正比。因此,O(N)
Space 函数的复杂度 validateBst
是分配给递归搜索整个树的最大“堆栈”内存量(函数调用开销)。
最大堆栈量实质上是树从根节点到最下方叶节点的高度。 在平均情况下(和最佳情况下) - 假设一棵树相当平衡,那么高度约为 log₂ N
。因此,space 复杂度将是 O(log₂ N)
或简单地 O(lg N)
在 最坏情况 场景中,树只是一个排序的链表分支递增值,然后 O(N)
作为最坏的情况。