Binary Tree Level Order Traversal - LeetCode
Can you solve this real interview question? Binary Tree Level Order Traversal - Given the root of a binary tree, return the level order traversal of its nodes' values. (i.e., from left to right, level by level). Example 1: [https://assets.leetcode.com/u
leetcode.com
문제
Input : 정수형 값을 가진 이진 트리
Output : 트리의 레벨별로 묶어 vector로 반환
시간 복잡도
※1초에 1억번을 대략적인 기준으로 삼는다.
n이 $0 \le n \le 2000$이므로 $O(n^2)$부터 고려해볼 수 있다.
해결 과정
대놓고 BFS를 사용하라고 만든 문제이기 때문에 BFS를 사용한다.
BFS는 모든 원소를 한 번씩 탐색하기 때문에 O(n)과 같으므로 충분히 사용가능하다.
구현
using pti = pair<TreeNode*,int>;
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
result.reserve(2001);
if (root == nullptr) return result;
// first : TreeNode | second : level
queue<pti> q;
q.push(pti(root, 0));
while(q.empty() == false)
{
// queue pop
TreeNode* now = q.front().first;
int nowLev = q.front().second;
q.pop();
// work
// 현재 인덱스가 유효하지 않은지 확인
while(result.size() < nowLev + 1) result.push_back(vector<int>());
// insert result
result[nowLev].push_back(now->val);
// queue push
if (now->left != nullptr) q.push(pti(now->left, nowLev + 1));
if (now->right != nullptr) q.push(pti(now->right, nowLev + 1));
}
return result;
}
되돌아보기
n == 0일때 확인하는 걸 깜빡해서 좀 시간을 소요했다
입력 값 잘 보기!
개선 코드
나는 각 원소마다 level을 첨부하여 level을 확인했는데, 따로 첨부하지 않고 level단위로 처리를 하는 쉬운 방법도 존재했다.
vector<vector<int>> levelOrder(TreeNode* root)
{
vector<vector<int>> result;
result.reserve(2001);
if(root == nullptr) return result;
queue<TreeNode*> q;
q.push(root);
while(q.empty() == false)
{
int levSize = q.size();
result.push_back(vector<int>());
for (int i = 0; i < levSize; ++i)
{
TreeNode* now = q.front();
q.pop();
result.back().push_back(now->val);
if (now->left != nullptr) q.push(now->left);
if (now->right != nullptr) q.push(now->right);
}
}
return result;
}
안그래도 항상 BFS에서 level단위로 작업하는 문제가 있을 때 귀찮았는데 좋은 거 하나 알아갑니다~~
'코딩 테스트 > 알고리즘 풀이' 카테고리의 다른 글
| 🟠[Leet code - 238] Product of Array Except Self ❌ (0) | 2026.04.30 |
|---|---|
| 🟠[Leet code - 347] Top K Frequent Elements ✅ (0) | 2026.04.28 |
| 🟢[Leet code - 169] Majority Element ✅ (0) | 2026.04.24 |
| [Leet code - 349] Intersection of Two Arrays ✅ (0) | 2026.04.24 |
| [Leet code - 763] Partition Labels ✅ (0) | 2026.04.02 |
| [Leet code - 55] Jump Game ✅ (0) | 2026.03.23 |
| [Leet code - 72] Edit Distance ❌ (1) | 2026.03.12 |
| [Leet code - 64] Minimum Path Sum ✅ (0) | 2026.03.06 |