2013-10-06 90 views
0

我創建了一個函數來將數據插入BST,並且它工作正常。我使用「通過引用傳遞」,「head」的值在每次插入後都會改變。但是,我發現「頭」始終指向我插入的第一個值。有誰能在這裏解釋是什麼導致「頭」指向我插入的第一個數據?用C++插入BST

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

我認爲這是正確的,「頭」總是指向頭(根),是不是你期望什麼? – 4pie0

回答

0

是功能應該如何工作的,應head永遠不會改變,不然就會失去跟蹤的樹根。

只要你有指向根的head,你可以訪問整個樹。

爲什麼值沒有發生變化,當你寫insert(head->left,val);

你不分配一個新的價值head,你只是路過的參考左子到下一個函數調用的原因。

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 
} 

那麼當你將數據添加到根節點(界河不爲空了)

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); 
} 
} 
+0

謝謝。這是有道理的。當第一個節點被創建時,head被改變。下面的節點只是改變head-> left,head-> right等。 – mogutoutou

+0

確切地說,這就是它 – 4pie0