【问题标题】:Binary Tree Level Order Traversal in leetcodeleetcode 中的二叉树级顺序遍历
【发布时间】:2018-10-02 13:51:13
【问题描述】:

尝试运行代码时出错“在抛出 'std::bad_alloc' 实例后调用终止 什么():std::bad_alloc” 代码:

#include<bits/stdc++.h>
using namespace std;

class Solution {
public:

    vector<vector<int>> levelOrder(TreeNode* root) {
        int d = height(root);
        vector<int> lol[d];
        vector<vector<int>> ans;
        queue<TreeNode*> q;
        if(root!=NULL)
            q.push(root);
        for(int i=0; i<=d;i++){
            ans.push_back(level(i,q,lol[i]));
        }
        return ans;
    }

    vector<int> level(int i,queue<TreeNode*> q,vector<int> lol){
        if (q.size() != 0)
        {
            for(int a=0;a<=i;a++){
                lol.push_back(q.front()->val);
                q.push(q.front()->left);
                q.push(q.front()->right);
                q.pop();
            }
        }
        return lol;
    }

    int height(TreeNode* root){
        if (root==NULL)
            return 0;
        else{
            int lef = height(root->left) + 1;
            int rig = height(root->right) + 1;
            if(lef>rig)
                return lef;
            else
                return rig;
        }
    }
};

输出应采用以下形式: [[3],[9,20],[15,7]]

谁能告诉我代码中的错误在哪里。 我是 C++ 和 leetcode 编程的新手,所以很难发现错误。 请帮忙。

【问题讨论】:

  • 调试器。使用调试器。调试器将允许您单步调试代码,观察变量中的值。通常,使用调试器比正确发布到 StackOverflow 并等待有人为您检查或调试您的程序要快。
  • 究竟是在哪里抛出异常?
  • 您可能不想通过副本传递矩阵(返回它们或在参数中作为副本传递)。我建议通过引用将它们作为参数传递(如果未修改矩阵,则首选常量引用)。
  • 不,那不是调试器。这是一个精美的网页,允许您输入代码,然后它会为您编译和执行。要运行调试器,您需要安装编译器 + 调试器,然后在本地调试。 GCC 和 GDB 是一个很好的起点。

标签: c++ tree c++14 binary-tree tree-traversal


【解决方案1】:

我的猜测是您将节点推入队列而不检查它们是否为 NULL。从队列中弹出时,您还可以取消引用它们而不进行检查。

【讨论】:

  • 我试过了,但它仍然给出同样的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多