🧩Algo 二叉树

102. 二叉树的层序遍历

难度:🟡 Medium | 标签:树、BFS | 状态:⬜ LeetCode 链接

思路

队列 BFS。每层循环开始记录当前队列 size,只处理这 size 个为一层。

代码

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;
        if (!root) return res;
        queue<TreeNode*> q;
        q.push(root);
        while (!q.empty()) {
            int sz = q.size();
            vector<int> level;
            level.reserve(sz);
            for (int i = 0; i < sz; ++i) {
                auto* x = q.front(); q.pop();
                level.push_back(x->val);
                if (x->left)  q.push(x->left);
                if (x->right) q.push(x->right);
            }
            res.push_back(std::move(level));
        }
        return res;
    }
};

复杂度

  • 时间 O(n),空间 O(n)

易错 / 回顾

  • sz 锁定当前层范围是关键
  • 子节点入队前判 nullptr
  • Z 字遍历 / 右视图 / 锯齿都是此模板的变种
Related · 二叉树