私は大きなプロジェクトでは単純なバイナリ検索ツリーを作成しています。私はバイナリ検索ツリーの概念を理解しており、C++で実装する構文に問題があるだけです。私は意図的にブーストのツリーコンテナを使用していません。ツリーのコードは次のとおりです。ポインタでエラーが発生する
struct Tree{
int nodeValue;
Tree *nodeChild1;
Tree *nodeChild2;
Tree(int userProvidedValue){
nodeValue = userProvidedValue;
nodeChild1 = NULL;
nodeChild2 = NULL;
}
static void placeValue(Tree &parent, int value);
static Tree findValue(Tree parent, int value);
static void crawl(Tree parent);
~Tree(){
delete nodeChild1;
delete nodeChild2;
}
};
void Tree::placeValue(Tree &parent, int value){
Tree node = Tree(value);
cout<<"made node"<<endl;
if(value>parent.nodeValue){
cout<<"eval node child 2"<<endl;
if(parent.nodeChild2 ==NULL){
cout<<"reaching this";
parent.nodeChild2 = &node;
}
else{
placeValue(*parent.nodeChild2, value);
}
}
if(value<=parent.nodeValue){
cout<<"eval node child 1"<<endl;
if(!parent.nodeChild1){
cout<<"assigning"<<endl;
parent.nodeChild1 = &node;
}
else{
placeValue(*parent.nodeChild1, value);
}
}
}
しかし、私はその後、Tree::placeValue(parent, 4)
でそれを別のノードを追加するTree parent = Tree(5)
でツリーを構築するたびにそれが正常にコンパイルされますが、メッセージは、exeファイルがクラッシュしたことを私に言ってポップアップ表示されます。
このクラッシュがどこから来ているのか理解してもらえますか?前もって感謝します。ツリーをクロールする
コードは次のようになります。
void Tree::crawl(Tree parent){
cout<<parent.nodeValue<<endl;
if(NULL!=parent.nodeChild1){
crawl(*parent.nodeChild1);
}
if(NULL!=parent.nodeChild2){
crawl(*parent.nodeChild2);
}
}
ボーナス質問:ツリー::クロールツリーの親の代わりに木&親の引数を取るとき、それは正常に動作します。ただし、&がないと失敗します。それはなぜそうだと誰も説明してもらえますか?
ありがとうございます。しかし、今はTree :: crawlが呼び出されて同じことが起こると、プログラムがコンパイルされてクラッシュします。あなたは理由を考えることができますか? – jozefg
Tree ::クロールコードを投稿しないと、私はあなたを助けることができません:D – mfontanini
本当ですか?ごめんなさい!私はそれを投稿します。 – jozefg