【发布时间】:2018-12-19 15:44:57
【问题描述】:
#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。如何检查结构的指针是否等于 NULL?
编辑在插入方法中,如果树没有任何节点,则不应进入第一个while循环,因为root应该等于NULL。我的问题是它无论如何都会进入这个循环并在检查临时子代(仍未定义)时崩溃。
【问题讨论】:
-
"指针好像从 0 变成了 0x4" 你怎么知道?该方法中有两个
couts,它们打印两个不同指针的值。输出是什么,你期待什么? -
我在类外看到了您的
Tree构造函数的定义,但我没有看到它的相应声明? ???也许你忘了改几个字? -
@user463035818 我留下了错误的代码部分,我把它改成了它应该的样子。
-
仅供参考,
Tree tree = tree();不是有效的 C++。如果该行应该只是Tree tree;再问:发布一个 real minimal reproducible example 会产生您的问题,并清楚地解释预期与实际操作,否则这个问题注定要关闭.