1
該代碼遍歷樹,但不使用遞歸,用堆棧替換它。 堆棧的最大大小應該是最後一級中的節點數。 是以下代碼的空間複雜度:O(高度),其中root的高度是0?無遞歸樹遍歷的空間複雜度
public void preOrder() {
if (root == null) throw new IllegalStateException("the root cannot be null");
final Stack<TreeNode<E>> stack = new Stack<TreeNode<E>>();
stack.add(root);
while (!stack.isEmpty()) {
final TreeNode<E> treeNode = stack.pop();
System.out.print(treeNode.item + " ");
if (treeNode.right != null) stack.add(treeNode.right);
if (treeNode.left != null) stack.add(treeNode.left);
}
}
是的,你是正確的,但不是O(2^height)與O(N)相同,其中N是樹中最壞情況下的節點數。在最壞的情況下,堆棧的最大尺寸也可以是N. – sashas