二叉树的插入


不要忘了*后面的&

void insert(Node*&root,int p){
  // Node*&root 的&不能忘,要不然没法修改真正的指针指向,只修改了镜像的。
  if(root==NULL){
    root=new Node();
    root->num=p;
    return;
  }
  else if(root!=NULL)
  {
      if(pnum){
          insert(root->left,p);
      }
      else{
          insert(root->right,p);
      }
  }
}

错误的代码:

  • 原因:p->left返回的不是p->left的地址,是NULL,对NULL的修改不是对root的修改
void add(Node*root,int num){
  Node *p=root;
  while(p!=NULL){
    if(p->num>num){
      p=p->left;
    }
    else{
      p=p->right;
    }
  }
  p=new Node();
  p->num=num;
}

正确的代码:

void add(Node*&root,int num){
  if(root==NULL){
    root=new Node();
    root->num=num;
    return;
  }
  if(root->num>num){
      add(root->left,num);
  }
  else{
      add(root->right,num);
  }
}

你可能感兴趣的:(二叉树的插入)