Нужно лучшее объяснение, почему мы используем указатели на указатели в бинарном поиске - PullRequest
0 голосов
/ 04 июля 2011

Я просто пытался лучше понять указатели на указатели, и в Интернете я нашел пример двоичного поиска, где разработчик использовал указатели на указатели в функции вставки.

Мой вопрос:

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

1 Ответ

0 голосов
/ 04 июля 2011

Из-за этой строки, которая присваивает элементу tree, если он равен нулю, т. Е. Запускается новое дерево.

*tree = item;

Если бы вы взяли только node*, вы бы невозможность назначить ему новое значение, которое будет видно снаружи функции.Это связано с тем, что указатель передается значением , поэтому функция insert будет просто изменять копию оригинала.

2) в конце функции вставкиВ коде используется рекурсивный метод, но я не понял синтаксиса использования "&" insert (& (* tree) -> right, item);

Оператор -> имеет более высокий приоритет, чем *Оператор 1016 * делает, поэтому он передает адрес *tree->right, т. Е. Следующий в строке node**.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...