2016-09-07 25 views
1

私はチュートリアルのオンライン(https://www.youtube.com/watch?v=z0FDBGbf42Q:PaulProgramming)に従っているバイナリ検索ツリーを作成しました。私のコードは実際にチュートリアルのコードと同じですが、私がメインを走らせると、私はセグメンテーションフォルトを取得します。なぜ私は理解できません。もし誰かが私の誤りがどこにあるのかを指摘できれば、それは非常に高く評価されるだろう。そして、はい、ネームスペースstdを使用して申し訳ありません、私はこの実行を取得した後、私はすべて適切に変更されます。 addLeafPrivateでBST C++のセグメンテーションエラー

BST.h

#ifndef BST_H 
#define BST_H 

class BST{ 
private: 
    struct node 
    { 
     int data; 
     node* left; 
     node* right; 
    }; 

    node* root; 

    void addLeafPrivate(int Data, node* ptr); 
    void printInOrderPrivate(node* ptr); 

public: 
    BST(); 
    node* createLeaf(int Data); 
    void addLeaf(int Data); 
    void printInOrder(); 

}; 
#endif 

BST.cpp

#include <iostream> 
#include <cstdlib> 
#include "BST.h" 

using namespace std; 

BST::BST(){ 
    root = NULL; 
} 



BST::node* BST::createLeaf(int Data){ 
    node* leaf = new node; 
    leaf->data = Data; 
    leaf->left = NULL; 
    leaf->right = NULL; 

    return leaf; 
} 

void BST::addLeafPrivate(int Data, node* ptr){ 
    if(root = NULL) 
     root = createLeaf(Data); 

    else if(Data < ptr->data){ 
     if(ptr->left != NULL) 
      addLeafPrivate(Data, ptr->left); 
     else 
      ptr->left= createLeaf(Data); 
    } 

    else if(Data > ptr->data){ 
     if(ptr->right != NULL) 
      addLeafPrivate(Data, ptr->right); 
     else 
      ptr->right= createLeaf(Data); 
    } 

    else 
     cout<< "The key " << Data << "already exist in the Binary Search Tree" << endl; 
} 

void BST::printInOrderPrivate(node* ptr){ 
    if(root != NULL){ 
     cout<< ptr->data << " " <<endl; 
     if(ptr->left != NULL) 
      printInOrderPrivate(ptr->left); 
     if(ptr->right != NULL) 
      printInOrderPrivate(ptr->right); 
    } 
    else 
     cout<<"Binary Search Tree is empty " << endl; 
} 

void BST::addLeaf(int Data){ 
    addLeafPrivate(Data, root); 
} 

void BST::printInOrder(){ 
    printInOrderPrivate(root); 
} 

メイン

#include <iostream> 
#include <cstdlib> 
#include "BST.cpp" 

int main(){ 
    BST tree; 
    tree.addLeaf(2); 
    tree.addLeaf(5); 
    tree.addLeaf(10); 
    tree.addLeaf(0); 

    tree.printInOrder(); 

    return 0; 
} 
+1

あなたの 'bst.h'と' main.cpp'ファイルは同じです。私はこれがtypoだと仮定します。その場合は、実際の* bst.hを表示する必要があります。 – paxdiablo

+1

main.cppにbst.cppを含めるにはどうしたらいいですか? – HazemGomaa

+0

おっと私の間違いは、私を編集させてください –

答えて

3

あなたは(ルート= NULL)場合の代わりに、(ルート== NULL場合の対処)

+1

私はそれがこのようなものになることを知っていた!私は別の目が必要でした。どうもありがとうございます。どのようなルーキーミス。 –

+0

私はあなたの答えを6分で受け入れるでしょう –

+0

私はあなたの答えを受け入れました、私は時間の無駄をお詫び申し上げます。しかし、あなたは私を非常に助けてくれました。 stackoverflowコミュニティでない場合、私は数時間以上バグを探しています。 –

関連する問題