You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode层序遍历出现vector空指针引用运行时错误该如何解决?

报错根因
  • 你预先给结果vectorans固定了4行4列的大小,当二叉树的深度大于4,或者任意一层的节点数量大于4时,对ans[row][col]的赋值操作会触发数组越界,属于未定义行为,才会出现STL vector的空指针绑定报错。
  • 代码存在逻辑错误:赋值节点值时错误使用了根节点node->val,而非当前遍历到的节点temp->val,会导致所有存储的节点值都是根节点的值。
  • 列索引col定义后没有自增逻辑,同一层的所有节点都会被写到相同下标位置,逻辑完全错误。
更合理的实现思路

不用提前设定vector的大小,采用动态扩容的方式处理分层:

  • 不需要用NULL作为层分隔符,每次遍历队列前先取队列当前的长度,这个长度就是当前层的节点总数
  • 每开始处理新的一层时,先往ans中push一个空的一维vector,再遍历当前层的所有节点,把节点值逐个push到当前层的vector中即可,无需手动维护行、列索引
修正后的完整代码
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> ans;
        // 特判根节点为空的边界情况
        if (root == nullptr) return ans;
        queue<TreeNode*> q;
        q.push(root);
        while (!q.empty()) {
            // 获取当前层的节点总数
            int levelSize = q.size();
            // 新增空数组存储当前层节点值
            ans.push_back(vector<int>());
            // 遍历当前层所有节点
            for (int i = 0; i < levelSize; ++i) {
                TreeNode* curr = q.front();
                q.pop();
                ans.back().push_back(curr->val);
                // 子节点入队
                if (curr->left != nullptr) q.push(curr->left);
                if (curr->right != nullptr) q.push(curr->right);
            }
        }
        return ans;
    }
};

内容的提问来源于stack exchange,提问作者Badal_01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:15:07