【问题标题】:Binary Search Tree inorder predecessor space complexity二叉搜索树中序前驱空间复杂度
【发布时间】:2019-03-20 01:48:51
【问题描述】:
我正在研究二叉搜索树,但无法找到有关查找给定节点前驱所需空间的大量信息。基于迭代方法,我相信我需要 O(1) 空间(就地),因为我们只需要一个变量加上堆栈上的单个节点。为了递归地完成这个,我们必须维护一个堆栈。由于可以遍历到最左边/最小节点,因此我们可能会遍历二叉搜索树的整个高度。因此,空间复杂度为 O(h)。
这些假设是正确的还是我遗漏了什么?
【问题讨论】:
标签:
binary-search-tree
computer-science
【解决方案1】:
请记住,每次递归调用都会降低高度,并且每个高度值只有一次调用。因此,我们可以执行迭代搜索。
让n1, n2 是节点,这样n2 是根,n1 是空的。
让v 成为您要查找的节点
虽然 n2 不是 v:
-
n1 := n2
- 如果
v.value > n2.value, n2 := n2.right
- 否则
n2 := n.left
返回n1
我保留了一个常数 (2) 指针,因此复杂度为 O(1)。