102. Binary Tree Level Order Traversal - cocoder39/coco39_LC GitHub Wiki

102. Binary Tree Level Order Traversal

Notes 2020

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        queue = collections.deque()
        if root:
            queue.append(root)
        
        res = []
        while queue:
            sz = len(queue)
            level = []
            for i in range(sz):
                cur = queue.popleft()
                level.append(cur.val)
                if cur.left:
                    queue.append(cur.left)
                if cur.right:
                    queue.append(cur.right)
            res.append(level)
        return res

===============================================================

both time complexity is O(n). space complexity of bfs is O(k) where k = max #node of a level, of dfs is O(h) where h is height of tree

bfs

vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;
        queue<TreeNode*> q;
        if (root) {
            q.push(root);
        }
        
        while (! q.empty()) {
            vector<int> level;
            int sz = q.size();
            
            for (int i = 0; i < sz; i++) {
                TreeNode* node = q.front();
                q.pop();
                level.push_back(node->val);
                
                if (node->left) {
                    q.push(node->left);
                } 
                if (node->right) {
                    q.push(node->right);
                }
            }
            res.push_back(level);
        }
        return res;
    }

dfs

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;
        helper(res, root, 0);
        return res;
    }
private:
    void helper(vector<vector<int>>& res, TreeNode* node, int level) {
        if(! node) {
            return;
        }
        
        if (res.size() == level) { // a start of a new level
            res.push_back(vector<int>());
        }
        res[level].push_back(node->val);
        helper(res, node->left, level + 1);
        helper(res, node->right, level + 1);
    }
};
⚠️ **GitHub.com Fallback** ⚠️