Given the root of a binary tree, return the bottom-up level order traversal of its nodes' values. (i.e., from left to right, level by level from leaf to root).
Example 1:
Input: root = [3,9,20,null,null,15,7] Output: [[15,7],[9,20],[3]]
Example 2:
Input: root = [1] Output: [[1]]
Example 3:
Input: root = [] Output: []
Constraints:
[0, 2000].-1000 <= Node.val <= 1000문제 링크: https://leetcode.com/problems/binary-tree-level-order-traversal-ii/
이 문제는 표준적인 '이진 트리 레벨 순회(Level Order Traversal)' 문제에서 출력 순서만 바꾼 버전입니다. 레벨 순회는 너비 우선 탐색(BFS)을 사용하여 구현하는 것이 정석입니다.
핵심 아이디어: BFS를 사용하여 트리를 위에서 아래(top-down) 순서로 순회하고, 각 레벨의 노드들을 리스트에 담는다. 모든 레벨의 탐색이 끝나면, 최종 결과 리스트의 순서를 뒤집어 아래에서 위(bottom-up) 순서로 만든다.
levelSize)를 큐의 현재 크기로 저장합니다.levelSize만큼 반복하여 큐에서 노드를 꺼내(poll) 그 값을 `currentLevel`에 추가하고, 해당 노드의 왼쪽/오른쪽 자식이 있다면 큐에 추가(offer)합니다.import java.util.*;
class Solution {
public List> levelOrderBottom(TreeNode root) {
List> result = new ArrayList<>();
if (root == null) return result;
Queue queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int levelSize = queue.size();
List currentLevel = new ArrayList<>();
for (int i = 0; i < levelSize; i++) {
TreeNode currentNode = queue.poll();
currentLevel.add(currentNode.val);
if (currentNode.left != null) queue.offer(currentNode.left);
if (currentNode.right != null) queue.offer(currentNode.right);
}
result.add(currentLevel);
}
Collections.reverse(result);
return result;
}
}