#include<stack>
#include<iostream>
class Tree{
private:
struct tree{
int val;
tree * lChild;
tree * rChild;
tree * Parent;
};
tree *root;
public:
Tree();
void insert(int x);
};
Tree::Tree(){
root = NULL;
std::cout<<"ROOT inside constructor : "<<root<<std::endl;
}
void Tree::insert(int x){
tree *wst;
wst->val = x;
wst->lChild = NULL;
wst->rChild = NULL;
tree *temp = root;
tree *p = NULL;
std::cout<<"ROOT inside insert : "<<root<<std::endl;
while(temp != NULL){
p = temp;
if(x < temp->val)
temp = temp->lChild;
else
temp = temp->rChild;
}
std::cout<<x<<std::endl;
wst->Parent = p;
if(p == NULL){
root = wst;
}
else{
if(x < p->val)
p->lChild = wst;
else
p->rChild = wst;
}
}
int main(){
Tree tree;
tree.insert(404);
}
我想检查指针根是否等于NULL,但似乎不太可行。当我进入方法插入时,指针似乎从0变为0x4。如何检查struct的指针是否等于NULL?
EDIT在insert方法中,如果树没有任何节点,则它不应该在while循环中首先输入,因为根应该等于NULL。我的问题是,无论如何它都会进入此循环,并在检查临时子项(仍未定义)时崩溃。
答案 0 :(得分:4)
wst
指向什么?
tree *wst;
wst->val = x;
wst->lChild = NULL;
wst->rChild = NULL;
// [...]
wst->Parent = p;
哇!您的程序具有未定义的行为。难怪它崩溃了。 :)
您可能需要tree* wst = new tree();
。别忘了也将delete
的节点放在Tree
析构函数中!
我建议不要使用类型Tree
和类型tree
;或许可以叫后者Node
?