Из-за этой строки, которая присваивает элементу tree
, если он равен нулю, т. Е. Запускается новое дерево.
*tree = item;
Если бы вы взяли только node*
, вы бы невозможность назначить ему новое значение, которое будет видно снаружи функции.Это связано с тем, что указатель передается значением , поэтому функция insert
будет просто изменять копию оригинала.
2) в конце функции вставкиВ коде используется рекурсивный метод, но я не понял синтаксиса использования "&" insert (& (* tree) -> right, item);
Оператор ->
имеет более высокий приоритет, чем *Оператор 1016 * делает, поэтому он передает адрес *tree->right
, т. Е. Следующий в строке node**
.