Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree [3,9,20,null,null,15,7],
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
문제 풀이:
레벨 기준 트리 순회
bfs로 순회하되 레벨을 기준으로 노드를 체크한다.
1. 맨 처음엔 루트 노드를 큐에 푸쉬
2. 큐의 사이즈를 체크 -> 같은 레벨에 있는 노드 수이다.
3. 벡터 생성
4. 큐의 사이즈 만큼 노드를 순회
4-1. 현재 노드를 벡터에 담는다.
4-2. 현재 노드의 왼쪽 오른쪽 노드(다음 레벨의 노드들)를 확인 후 있으면 큐에 푸쉬
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> result;
if(!root) return result;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
int size = q.size();
vector<int> level;
for(int i=0; i<size; i++){
TreeNode* fron = q.front();
q.pop();
level.push_back(fron->val);
if(fron->left != nullptr){
q.push(fron->left);
}
if(fron->right != nullptr){
q.push(fron->right);
}
}
result.push_back(level);
}
reverse(result.begin(), result.end());
return result;
}
};
'알고리즘 문제풀이 > leetcode' 카테고리의 다른 글
[leetcode 111] Minimum Depth of Binary Tree (0) | 2020.11.21 |
---|---|
[leetcode 110] Balanced Binary Tree (0) | 2020.11.21 |
[leetcode 108] Convert Sorted Array to Binary Search Tree (0) | 2020.11.20 |
[leetcode 122] Best Time to Buy and Sell Stock II (0) | 2020.11.20 |
[leetcode 125] Valid Palindrome (0) | 2020.11.20 |
댓글