我有以下问题。我在2年前用C ++编写代码,现在决定练习这门语言。我不知道发生了什么,因为当我想在插入后访问root->数据时,编译器说这是一个访问viloation。可能是我完全忘记了内存分配等编程概念,但请帮助我,我不能在这里看到错误!提前谢谢!
#define BLACK 0
#define RED 1
using namespace std;
struct Node {
Node* left, *right;
int data;
bool color;
Node(int key) {
data = key;
left = right = NULL;
color = RED;
}
};
struct RBTree {
Node* root;
RBTree() { root = NULL; }
void insertBST(Node* node, int key) {
if (node == NULL) {
node = new Node(key);
}
else {
if (key < node->data) {
insertBST(node->left, key);
}
else {
insertBST(node->right, key);
}
}
}
void insert(int key) {
insertBST(root, key);
}
};
int main()
{
RBTree tree;
tree.insert(10);
cout << tree.root->data;
_getch();
return 0;
}
答案 0 :(得分:1)
试试这个:
struct RBTree {
Node* root;
RBTree() { root = NULL; }
void insertBST(Node** node, int key) {
if (*node == NULL) {
*node = new Node(key);
}
else {
if (key < (*node)->data) {
insertBST(&(*node)->left, key);
}
else {
insertBST(&(*node)->right, key);
}
}
}
void insert(int key) {
insertBST(&root, key);
}
};
答案 1 :(得分:0)
if (node == NULL) {
node = new Node(key);
}
在上面的代码段中,当root == NULL时,您正在创建一个新节点。但是您没有将新创建的节点分配给根。需要通过引用传递如下。
T obj;
if ( !ptr )
ptr = &obj;