struct node{
int element;
node* left;
node* right;
};
typedef node* SET;
void INSERT(int x, SET* A){
node* pA = *A;
if (pA == NULL){
pA = new node;
pA->element = x;
pA->left = NULL;
pA->right = NULL;
}
else{
if (x < pA->element){
INSERT(x,&(pA->left));
}
else if (x>pA->element){
INSERT(x, &(pA->right));
}
}
}
int main(){
node* A = NULL;
INSERT(1,&A);
cout <<A->element<<endl;
return 0;
}
上面的代码是一个简单的插入方法,它将元素插入到BST中。当我访问A-&gt;元素时,我只是保持段默认。非常感谢您的回答。
修改
哇,这个指针的东西真的很混乱。所以当我做node * pA = * A时,我以为我会创建一个指向A位置的指针。然后,当我执行pA = new节点时,它会在堆中创建一个指向pA的节点对象,这是相同的作为A.我说错了吗?答案 0 :(得分:2)
您没有更改*A
:
if (pA == NULL) {
pA = new node;
pA->element = x;
pA->left = NULL;
pA->right = NULL;
*A = pA;
}
答案 1 :(得分:1)
我会将其更改为:
void INSERT(int x, SET* A){
if (*A == NULL){
*A = new node;
*A->element = x;
*A->left = NULL;
*A->right = NULL;
}
/* The rest */
答案 2 :(得分:1)
考虑使用C ++引用。
引用允许A
中的INSERT
和A
中的main
表示相同的数据,从而减少指针混淆。
struct node{
int element;
node* left;
node* right;
};
void INSERT(int x, node* &A){
if (A == NULL){
A = new node;
A->element = x;
A->left = NULL;
A->right = NULL;
}
else{
if (x < A->element){
INSERT(x,&(A->left));
}
else if (x>A->element){
INSERT(x, &(A->right));
}
}
}
int main(){
node* A = NULL;
INSERT(1,A);
cout <<A->element<<endl;
return 0;
}