2017-11-08 12 views
0

私はそのプリオーダとインオーダートラバーサルでバイナリツリー条件を構築しようとしました。ビルドバイナリツリーソリューションで何が問題になっていますか?

しかし、以下のコードを実行すると、20%のテストサンプルが渡され、preorder = inorder = {1,2}で「1351 segmentation fault(core dumped)」が発生しました。

私のコードに間違いがありますか?そして、Linux上で "segmentation fault"をデバッグする方法は?

THANKS !!!あなたはそのメンバーvalleftrightにアクセスする際

class Solution { 
    /** 
    *@param preorder : A list of integers that preorder traversal of a tree 
    *@param inorder : A list of integers that inorder traversal of a tree 
    *@return : Root of a tree 
    */ 
public: 
    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { 
     // write your code here 
     TreeNode * root; 
     if (preorder.empty() || inorder.empty()) { 
      cout<<"in if"<<endl; 
      return NULL; 
     } 
     root->val = preorder.front(); 
     vector<int> inorder_left(inorder.begin(), inorder.begin() + getIndex(inorder, preorder.front()));  
     vector<int> inorder_right(inorder.begin() + getIndex(inorder, preorder.front()) + 1, inorder.end()); 
     vector<int> preorder_left(preorder.begin() + 1, preorder.begin() + 1 + inorder_left.size()); 
     vector<int> preorder_right(preorder.begin() + 1 + inorder_left.size(), preorder.end());   
     root->left = buildTree(preorder_left, inorder_left); 
     root->right = buildTree(preorder_right, inorder_right); 
     return root; 
    } 
private: 
    int getIndex(vector<int> & vec, int target) { 
     for (int i = 0; i < vec.size(); i++) { 
      if (vec[i] == target) { 
       return i; 
      } 
     } 
    } 
}; 
+2

コアダンプをお持ちの場合は、デバッガで実行することができます – doctorlove

+1

私が書いた日にフラッシュバックが発生します – StoryTeller

+0

1351セグメンテーションフォールトはあなたを助けません。最初のことだけを心配してください。十分に小さなデータを使用してデバッグしやすくする。 –

答えて

4

ポインタrootが初期化されていません。たとえば、new TreeNode()で初期化します。

+1

2秒後に私を打つ:D –

+0

THX !!!それは本当に私のエラーを解決〜 – zhkai

2

TreeNode * root;

これは実際には値に初期化されません。あなたはそれを宣言しますが、次のようにする必要があります:

ルート=新しいTreeNode;

すべてを修正する必要があります。

関連する問題