我正在编写一个二进制搜索树。
class Node {
public:
Node* left;
Node* right;
int data;
Node(int x) : data(x) {}
void insert(int value) {
if (value < data) {
if (left == NULL)
left = new Node(value);
else
left->insert(value);
} else {
if (right == NULL)
right = new Node(value);
else
right->insert(value);
}
}
bool contains(int value) {
if (value == data)
return true;
else if (value < data) {
if (left == NULL)
return false;
else
return left->contains(value);
} else {
if (right == NULL)
return false;
else
return right->contains(value);
}
}
};当我在主程序中使用Node x,然后调用x.insert(15)时,它给出了一个分段错误。如果我先使用Node* x=new Node(10),然后使用use x->insert(15),那么它工作得很好。这背后的原因是什么?
int main() {
Node x(10);
x.insert(15);
}发布于 2019-10-12 14:30:14
主要的问题是您没有用nullptr初始化指针(left和right),但是您假设它们在insert中是用空指针初始化的。在构造函数中执行初始化可以解决这个问题:
Node(int x) : data{x}, left{nullptr}, right{nullptr} {}https://stackoverflow.com/questions/58351457
复制相似问题