2017-04-20 5 views
0
/*performing simple tree traversal in C++ and copying tree levels node data to vector<vector<int>> rows: 
Getting error: no matching function for call to 'std::vector<int>::push_back(std::vector<int>&)' 
*/ 

class Sample { 
public: 
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) 
    { 

     vector<vector<int>> result; 
     zigzagLevelOrder(root, result, 0); 
     return result; 

    } 

    void zigzagLevelOrder(TreeNode* root, vector<vector<int>>&result, int level) 
    { 
     if(level == result.size()) 
     { 
      vector<int> v; 
      v.push_back(root->val);  
      result[level].push_back(v); 
     } 
     else 
     { 
      result[level].push_back(root->val); 
     } 

     zigzagLevelOrder(root->left, result, level + 1); 
     zigzagLevelOrder(root->right, result, level + 1); 

    } 
}; 
+0

どのエラーが表示されますか? –

+0

@Henri root-> valはintです –

+0

@Anon:私は次の行でエラーが発生しています:result [level] .push_back(v); –

答えて

1

result[level].push_back(v);への呼び出しに該当する機能 - result[level]vector<int>への参照(インデックスが範囲外であるが)ではありませんので、このresult.push_back(v);

0

皆さん、ありがとうございます。問題が解決しました。これが有効な解決策です。これを最適化するコメントは大歓迎です。

 struct TreeNode { 
     int val; 
     TreeNode *left; 
     TreeNode *right; 
     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 
    }; 

    class Sample { 

    public: 
     vector<vector<int>> zigzagLevelOrder(TreeNode* root) 
     { 

      vector<vector<int>> result; 
      zigzagLevelOrder(root, result, 0); 
      return result; 

     } 

     void zigzagLevelOrder(TreeNode* root, vector<vector<int>>&result, int level) 
     { 
      if(root != 0) 
      { 

       if(level == result.size()) 
       { 
        vector<int> v; 
        if(level%2 == 0) 
        { 
         v.push_back(root->val); 
        } 
        else 
        { 
         vector<int>::iterator it = v.begin(); 
         v.insert(it, root->val); 
        } 
        result.push_back(v); 
       } 
       else 
       { 
        if(level%2 == 0) 
        { 
         result[level].push_back(root->val);  
        } 
        else 
        { 
         vector<int>::iterator it = result[level].begin(); 
         result[level].insert(it, root->val); 
        } 
       } 

       zigzagLevelOrder(root->left, result, level + 1); 
       zigzagLevelOrder(root->right, result, level + 1); 
      }   
     } 

    }; 
関連する問題