Bst-为什么我的Bst在将节点*转换为节点之后工作*&?

时间:2015-11-06 03:38:49

标签: c++ data-structures binary-search-tree

我实施了BST,我的实现看起来像这样

 void insert(node*&r,int key){      // 1 ) node* r 2) node*&r
    if(r==NULL){
        r=new node(key);
        return;
    }
    c++;
    if(r->key > key){
        insert(r->right,key);
    }
    else if(r->key <key){
        insert(r->left,key);
    }
  }

int main()
{
    int n;
    cin>>n;
    node *root=NULL;
    for(int i=0;i<n;i++){
        int x;
        cin>>x;
        insert(root,x);
    }
    return 0;
}

我之前清楚为什么节点*&amp; 不是节点* 。但是我今天有精神障碍。如果我们使用节点*&amp,我很困惑; 比我们永久编辑根BST的身份因此我们将松开BST。另一方面,我很困惑为什么它不能使用节点* 。任何人都可以详细解释一下。哪一个和为什么?

1 个答案:

答案 0 :(得分:1)

它现在有效,因为你通过引用传递指针,因此传递它的函数可以修改它。否则,您按值传递指针,并且在函数的退出处,不会修改作为参数传递的指针。

看看这里发生了什么:

node *root=NULL; // so initially root is nullptr

然后,在for循环中,你有

insert(root,x); // better take it by reference, otherwise root is not modified

在插入的退出处,root仅在通过引用传递时修改为,否则,如果按值传递,则保留NULL。请记住,指针的行为与任何其他变量一样,在C ++中,它默认按值传递。