我想用C++创建BST。当我尝试将指针分配给新节点时,它没有改变。在函数调用后,它仍然是随机值。是否可以用我的方法来做?
struct wezel {
int value;
wezel *l_val;
wezel *r_val;
wezel(int aValue) {
value = aValue;
l_val = NULL;
r_val = NULL;
}
};
struct tree {
wezel *root;
tree(wezel *aNode) {
root = aNode;
}
};
void addNode(int aValue, wezel aNode) {
if(aValue < aNode.value) {
if(aNode.l_val == NULL) {
wezel pt = wezel(aValue);
wezel *point = &pt;
aNode.l_val = point; //do not work
} else {
return addNode(aValue, *aNode.l_val);
}
} else if(aValue > aNode.value) {
if(aNode.r_val == NULL) {
wezel pt = wezel(aValue);
wezel *point = &pt;
aNode.r_val = point; //do not work
} else {
return addNode(aValue, *aNode.r_val);
}
}
};
wezel pt = wezel(aValue);
wezel *point = &pt;
aNode.l_val = point;
这里你创建了一个wezel类型的pt对象,一旦它离开作用域就会被销毁,而指针'point'和aNode.l_val仍然指向它的地址。顺便说一下'point'也会在离开作用域后被销毁)。
相反,你应该创建一个新的对象,像这样链接到 aNode.l_val。
aNode.l_val = new wezel(aValue);
不要忘了用各自的 "delete "语句正确处理你的节点。