用C ++插入BST

时间:2013-10-06 21:59:30

标签: c++ binary-search-tree

我创建了一个将数据插入BST的函数,它工作正常。我使用“按引用传递”并且每次插入后应该更改“head”的值。但是,我发现“head”始终指向我插入的第一个值。这里有人可以解释是什么原因导致“头”指向我插入的第一个数据?

void insert(node *&head, int val){
if(head == NULL){
    head = newNode(val);
}
else{
    if(val <head->data)
        insert(head->left,val);
    else
        insert(head->right,val);
}
}

2 个答案:

答案 0 :(得分:0)

该函数应该如何工作,head永远不会改变,否则你将失去对树根的跟踪。

只要您指向根head,就可以访问整个树。

当您编写insert(head->left,val);

时,值不变的原因是

您没有为head分配新值,只是将对左子项的引用传递给下一个函数调用。

答案 1 :(得分:0)

void insert(node *&head, int val){
if(head == NULL){
    head = newNode(val); // when you call insert() with pointer to root
                         // which is NULL this will create root node
}

然后将数据添加到根节点(不再是NULL)

else{ // this will be called and this doesn't create new root node
      // but just create nodes at its left or right side 
    if(val <head->data)
        insert(head->left,val);
    else
        insert(head->right,val);
}
}