使用下面的迭代和递归实现来考虑在完全倾斜的树(本质上是链表)的最坏情况下的空间复杂性:
# Iterative
def preorderTraversal(self, root):
if root is None:
return []
stack = [root]
while stack:
root = stack.pop()
print root.val
if root.right:
stack.append(root.right)
if root.left:
stack.append(root.left)
# recursive
def preorderTraversal(self, root):
if not root:
return
print(root.val)
preorderTraversal(root.left)
preorderTraversal(root.right)
以上我的理解正确吗?如果是这样,为什么在最坏的情况下,迭代和递归实现之间的空间差异呢?它们都是基于堆栈的,因此直觉上我认为它们在所有情况下都具有相同的时间和空间复杂性。是什么真正导致了这种差异?
提前感谢!
我以上的理解正确吗?
堆栈的数据结构
和调用的堆栈