C ++指针混淆(二进制搜索树)

时间:2012-09-02 16:13:57

标签: c++

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.我说错了吗?

3 个答案:

答案 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中的INSERTA中的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;
}