1
이 코드는 트리를 탐색하지만 재귀를 사용하지 않고 스택으로 대체합니다. 스택의 최대 크기는 마지막 레벨의 노드 수 여야합니다. 다음 코드의 공간이 복잡합니까? O (높이)? 루트 높이가 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 (N^2)와 같지 않습니다. 여기서 N은 최악의 경우 트리의 노드 수입니다. 또한 스택의 최대 크기는 최악의 경우 N 일 수 있습니다. – sashas