我一直在为大型项目开发简单的二叉搜索树。我理解二叉搜索树的概念,并且在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