我正在研究二进制搜索树,但无法找到有关找到给定节点的前任所需空间的大量信息。基于迭代方法,我认为我需要O(1)空间(就地),因为我们只需要一个变量和堆栈上的单个节点即可。要递归地完成此操作,我们必须维护一个堆栈。由于可以遍历最左边/最小的节点,因此有可能遍历二叉搜索树的整个高度。因此,为此的空间复杂度将为O(h)。
这些假设是否正确,或者我有什么遗漏?
答案 0 :(得分:1)
请记住,每个递归调用都会降低高度,并且每个高度值只有一个调用。因此,我们可以执行迭代搜索。
让n1, n2
成为节点,以n2
为根,n1
为空。
假设v
是您要寻找的节点
n2不是v
时:
n1
:= n2
v.value
> n2.value
,n2
:= n2.right
n2
:= n.left
返回n1
我保持了恒定数量的指针(2),因此复杂度为O(1)
。