[LeetCode] 102. Binary Tree Level Order Traversal

최대 1 분 소요

LeetCode - 102. Binary Tree Level Order Traversal 알고리즘 문제 풀이

분류

문제 링크 : https://leetcode.com/problems/binary-tree-level-order-traversal/

풀이

이진 트리를 레벨 순회(tree level order traversal)했을 때 각 노드가 갖는 값을 반환하는 문제이다. 레벨 순회를 하려면 동일한 레벨에 있는 노드에 접근해야 하므로 깊이를 우선하는 DFS로는 풀 수 없고, 너비를 우선하는 BFS를 활용하여 풀 수 있다.

  • 각 노드의 위치가 nullptr 값인지 확인하면서 현재 노드 기준에서 left와 right를 순서대로 큐에 넣어준다.

소스 코드

/**
 * 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>> levelOrder(TreeNode* root) {
        vector<vector<int>> ans;
        if (root == nullptr) {
            return ans;
        }
        queue<TreeNode*> q;
        q.push(root);
        ans.resize(1);
        ans[0].push_back(root->val);
        while (!q.empty()) {
            int sz = (int)q.size();
            int ansIdx = (int)ans.size();
            ans.push_back(vector<int>());
            for(int s = 0; s < sz; ++s) {
                TreeNode *now = q.front();
                q.pop();
                if (now->left != nullptr) {
                    q.push(now->left);
                    ans[ansIdx].push_back(now->left->val);
                }
                if (now->right != nullptr) {
                    q.push(now->right);
                    ans[ansIdx].push_back(now->right->val);
                }
            }
        }
        ans.pop_back();
        return ans;
    }
};