Обход заказа на уровне двоичного дерева в leetcode - PullRequest
0 голосов
/ 02 октября 2018

получено сообщение об ошибке при попытке запустить код "terminate вызывается после создания экземпляра 'std :: bad_alloc' what (): 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, поэтому трудно найти ошибки.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 02 октября 2018

Я предполагаю, что вы помещаете узлы в очередь, не проверяя, имеют ли они значение NULL или нет.При выходе из очереди вы также разыменовываете их без проверки.

...