我一直在爲大型項目開發簡單的二叉搜索樹。我理解二叉搜索樹的概念,並且在C++中執行語法時遇到了麻煩。我故意不使用boost的樹形容器。我的代碼樹如下。指針錯誤
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 parent = Tree(5)
然後另一個節點添加到它與Tree::placeValue(parent, 4)
它編譯罰款,但彈出一個消息告訴我的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 2012-02-17 17:48:54
如果你沒有發佈Tree :: crawl代碼,我不能幫你:D – mfontanini 2012-02-17 17:52:52
哦,真的嗎?抱歉!我將張貼。 – jozefg 2012-02-17 17:57:22