2011-07-04 51 views
0

我只是想更好地理解指針和互聯網上的指針我找到了二進制搜索的例子,開發人員在插入函數中使用指針指針。需要更好的解釋,爲什麼我們在二進制搜索中使用指針指針

我的問題是:

  1. 沒有下面的代碼有超過它採用單指向其他BST代碼什麼優勢?
  2. 在插入函數結束時,代碼使用遞歸方法,但我不明白在insert(&(*tree)->right, item);中使用&的語法。

insert功能如下:

void insert(node ** tree, node * item) 
{ 
    if(!(*tree)) 
    { 
     *tree = item; 
     return; 
    } 
    if(item->val<(*tree)->val) 
     insert(&(*tree)->left, item); 
    else if(item->val>(*tree)->val) 
     insert(&(*tree)->right, item); 
} 

回答

0

由於此線,其分配tree到項目,如果它是空的,即,就開始一個新的樹。

*tree = item; 

如果你只花了node*,那麼你將無法分配新的值給它,這將是從功能的外部可見。這是因爲指針通過,因此insert函數只是修改原始副本。

2)在插入功能的端部的代碼使用遞歸方法,但我沒有understadn使用「&」的語法TEH插入(&(*樹) - >右,項);

->操作者具有igher優先級比&操作者做,因此被傳遞的*tree->right地址,即下一node**管線。

+0

只爲我的知識。我不能做類似於struct node * insert(struct node * node,int data)的東西if(node == NULL){return(newNode(data)); } else { if(data <= node-> data)node-> left = insert(node-> left,data); else node-> right = insert(node-> right,data); return(node); } } – samprat

+0

HI Ed S.感謝您的解釋。你幫我清除了我的疑惑。總之,如果我們想改變這個值,我們可以將這個值作爲一個函數中的指針傳遞。所以在相同的模式下,如果我們想要改變指針,那麼在那種情況下,我們必須將它作爲指針的指針傳遞。希望我是對的。 – samprat

+0

對於像我這樣的人來說更多............. http://www.codeguru.com/cpp/cpp/cpp_mfc/pointers/article.php/c4089/ http:// stackoverflow .com/questions/1913373/why-is-pointer-to-pointer-being-in-this-prog – samprat

相關問題