102. Binary Tree Level Order Traversal

1. Description

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).

2. Example

Example 1

Example 1
Input: root = [3,9,20,null,null,15,7]
Output: [[3],[9,20],[15,7]]

Example 2

Input: root = [1]
Output: [[1]]

Example 3

Input: root = []
Output: []

3. Constraints

  • The number of nodes in the tree is in the range [0, 2000].
  • -1000 <= Node.val <= 1000

4. Solutions

n is the number of nodes in root
Time complexity: O(n)
Space complexity: O(logn->n)

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode *root) {
        vector<vector<int>> nodes;
        traverse(root, 0, nodes);

        return nodes;
    }

private:
    void traverse(TreeNode *root, int level, vector<vector<int>> &nodes) {
        if (root != nullptr) {
            if (nodes.size() == level) {
                nodes.emplace_back();
            }

            nodes[level].push_back(root->val);

            traverse(root->left, level + 1, nodes);
            traverse(root->right, level + 1, nodes);
        }
    }
};

n is the number of nodes in root
Time complexity: O(n)
Space complexity: O(w)

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode *root) {
        if (root == nullptr) {
            return {};
        }

        vector<vector<int>> level_values;
        queue<TreeNode *> nodes{{root}};
        while (!nodes.empty()) {
            const int n = nodes.size();
            vector<int> values;
            values.reserve(n);

            for (int i = 0; i < n; ++i) {
                auto node = nodes.front();
                nodes.pop();

                if (node->left != nullptr) {
                    nodes.push(node->left);
                }
                if (node->right != nullptr) {
                    nodes.push(node->right);
                }

                values.push_back(node->val);
            }

            level_values.push_back(move(values));
        }

        return level_values;
    }
};
comments powered by Disqus