J'ai travaillé sur un simple arbre de recherche binaire pour un projet plus important. Je comprends le concept d'un arbre de recherche binaire et j'ai simplement des problèmes avec la syntaxe de l'implémentation en C++. Je n'utilise délibérément pas de conteneurs d'arbre boost. Mon code pour l'arbre est le suivant.Erreurs avec des pointeurs
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);
}
}
}
Cependant chaque fois que je construis un arbre avec Tree parent = Tree(5)
puis ajouter un autre nœud avec Tree::placeValue(parent, 4)
il compile bien, mais un message apparaît me disant que l'exe est tombé en panne.
Quelqu'un peut-il m'aider s'il vous plaît à comprendre d'où vient ce plantage? Merci d'avance.
Le code de ramper à travers l'arbre ressemble à ceci:
void Tree::crawl(Tree parent){
cout<<parent.nodeValue<<endl;
if(NULL!=parent.nodeChild1){
crawl(*parent.nodeChild1);
}
if(NULL!=parent.nodeChild2){
crawl(*parent.nodeChild2);
}
}
Bonus Question: Quand l'arbre :: rampent prend l'argument de parent Arbre & au lieu de parent arbre, il fonctionne très bien. Cependant, sans le &, il échoue. Quelqu'un peut-il s'il vous plaît expliquer pourquoi c'est ainsi?
Merci pour ce travail, cependant maintenant quand Tree :: crawl est appelé la même chose arrive, le programme compile puis se bloque. Pouvez-vous penser à une raison? – jozefg
Si vous ne publiez pas le code Tree :: crawl, je ne peux pas vous aider: D – mfontanini
Oh vraiment? Pardon! Je posterai ça. – jozefg