LeetCode 102 Binary Tree Level Order Traversal

218 阅读1分钟

LeetCode 102 Binary Tree Level Order Traversal

思路

递归

递归很好写,用一个变量记录当前遍历到第几层即可。任意顺序遍历均可。

迭代

正如前一题总结的那样,一层一层的考虑树,则使用队列。

代码

递归

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        map<int, vector<int>> mp;
        
        preorder(root, mp, 0);
        
        vector<vector<int>> rs;
        for (const auto &i : mp) {
            rs.emplace_back(i.second);
        }
        
        return rs;
    }
    
    void preorder(TreeNode *root, map<int, vector<int>> &mp, int level) {
        if (!root) return ;
        
        mp[level].push_back(root->val);
        preorder(root->left, mp, level+1);
        preorder(root->right, mp, level+1);
    }
};

迭代

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        queue<TreeNode*> qu;
        vector<vector<int>> rs;
        qu.push(root);
        int n = qu.size();
        
        while (!qu.empty()) {
            vector<int> level;
            while (n--) {
                root = qu.front();
                qu.pop();
                if (root) {
                    level.push_back(root->val);
                    qu.push(root->left);
                    qu.push(root->right);
                }
            }
            
            if (!level.empty())
                rs.push_back(level);
            n = qu.size();
        }
        
        return rs;
    }
};