cur
- указатель на указатель, поэтому для доступа к его дочерним элементам необходимо разыменовать его (*cur
) и только затем обращаться к элементу (->left
, ->right
).
После того, как вы получили следующий элемент (right
или left
), который является указателем, вам нужно сохранить его в cur
. Но cur - это указатель на указатель, поэтому вам нужно взять ссылку на if (используя оператор &
).
Общее выражение выглядит как уродливый &(*cur)
.
. Кстати, причина, по которой вам нужен указатель на указатель, заключается в строке *cur = new TreeNode(val);
.
Если вы просто используете указатель, эта строка ничего не изменит и только изменит ваш временный указатель. Поскольку вы используете указатель на указатель, вы меняете исходный узел в дереве.