私はチュートリアルのオンライン(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;
}
あなたの 'bst.h'と' main.cpp'ファイルは同じです。私はこれがtypoだと仮定します。その場合は、実際の* bst.hを表示する必要があります。 – paxdiablo
main.cppにbst.cppを含めるにはどうしたらいいですか? – HazemGomaa
おっと私の間違いは、私を編集させてください –