我将测试用例初始化为全局变量,在这里:
void InsertNode(BSTNode* &t, const int &key) {
if (t == NULL) {
t = new BSTNode;
t->key = key;
t->left = t->right = NULL;
} else {
if (key != t->key) {
if (key < t->key)
InsertNode(t->left, key);
else
InsertNode(t->right, key);
}
}
}
BSTNode t1[] = {
{4, &t1[1], &t1[2]},
{2, &t1[3], &t1[4]},
{6, &t1[5], &t1[6]},
{1, NULL, NULL},
{3, NULL, NULL},
{5, NULL, NULL},
{7, NULL, NULL}
};
int main() {
InsertNode(t1, 0);
return 0;
}
但是,当我尝试修改t1时,它会给我一个错误:
invalid initialization of non-const reference of type 'BSTNode*&' from a temporary of type 'BSTNode*'
有人可以帮我解释一下吗?谢谢!!
答案 0 :(得分:1)
问题是你的函数声明它可能会改变指针:
void InsertNode(BSTNode* &t, const int &key) {
它将非const指针作为参数引用,因此它有可能修改该指针。但是当你这样做时:
InsertNode(t1, 0);
你传入一个不可修改的指针,因为t1是一个数组。可以像指针一样使用数组,但是不能将指针指向其他位置。
解决这个问题的一种方法是拥有两个不同的功能:
void InsertNode(BSTNode* &t, const int &key);
void AddNode(BSTNode* t, const int &key) {
assert(t!=NULL);
if (key != t->key) {
if (key < t->key)
InsertNode(t->left, key);
else
InsertNode(t->right, key);
}
}
void InsertNode(BSTNode* &t, const int &key) {
if (t == NULL) {
t = new BSTNode;
t->key = key;
t->left = t->right = NULL;
} else {
AddNode(t,key);
}
}
然后致电
AddNode(t1, 0);