【发布时间】:2017-05-03 06:48:59
【问题描述】:
所以我知道递归顺序遍历的空间复杂度是 O(h) 而不是 O(n),因为 h = 树高,n = 树中的节点数。
这是为什么呢?假设这是遍历的代码:
public void inorderPrint (TreeNode root) {
if (root == null) {
return;
}
inorderPrint(root.left);
System.out.println(root.data);
inorderPrint(root.right);
}
我们将 n 个内存地址推送到调用堆栈,因此,空间复杂度应该是 O(n)。
我错过了什么?
【问题讨论】:
-
你不只是在推动——你在爆发。因此,堆栈的某些部分被多次使用。树的高度控制着你在弹出之前推动了多少。顺便说一句——我认为你打错了,函数不应该调用自己而不是
preorderPrint吗? -
查看这个以获得更清晰的答案:stackoverflow.com/questions/33590205/…
标签: data-structures binary-tree traversal inorder