我创建了一个将数据插入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);
}
}
答案 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);
}
}