В чем разница между глубиной + 1 и глубиной ++ в этой функции рекурсии DFS?

Я делаю leetcode и запутался, потому что результат depth ++ и depth + 1 совершенно другой! Раньше я думал, что они такие же. Кто-нибудь может объяснить разницу между ними?

private void dfs(TreeNode root, List<Integer> res, int depth) {
    if (root == null) return;
    if (res.size() == depth) {
        res.add(root.val);
    } 
    dfs(root.right, res, depth + 1); // depth++ would get different result
    dfs(root.left, res, depth + 1);
}
depth++; добавление является "почтовой" операцией. ++depth; и он "пред". Вот почему они называются операторами инкремента «пост» и «до».
Elliott Frisch 27.10.2018 04:47

В чем разница между depth + 1 и depth++вне функцией? Серьезно, вы можете сами ответить на этот вопрос.

John Bollinger 27.10.2018 04:47
depth++ увеличивает depth после вызова. Это оператор приращения Почта. Вы можете сделать ++depth, чтобы получить результаты, эквивалентные depth + 1
GBlodgett 27.10.2018 04:48

Но пока мы отвечаем здесь, обратите внимание, что, хотя ++depth будет оценивать тот же результат, что и depth + 1, но они также не эквивалентны, потому что первый вызывает побочный эффект на depth, которого нет у второго.

John Bollinger 27.10.2018 04:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
119
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

глубина ++ - это то же самое, что и depth=depth+1. Оператор инкремента изменит и вернет копию старого depth.

int x = depth;
depth = depth+1;
return x;

Операция глубина + 1 вернет значение выражения без каких-либо изменений.

return depth+1;

если вы используете инкремент поста с присваиванием

int a=1;
a = a++;
  • Вы можете думать так (a = a ++ => a = a, а затем a ++)
  • Теперь, когда мы присваиваем [a = a ++] a = 1 во время присваивания и после присваивания a = 2

если вы используете инкремент поста без присваивания

int x=1;
x++;
  • Теперь x = 2 во время присваивания и x = 2 также после присваивания.

Оператор приращения ПочтаvarName++ использует значение Текущий, тогда увеличивает переменную, тогда продолжает выполнение остальной части оператора.

Если вы использовали оператор приращения предварительно++varName, первый вызов будет работать так же, как и с depth + 1, но оставит переменную увеличенной, требуя, чтобы ее использование следующий учитывало это:

dfs(root.right, res, ++depth); // increment before using value
dfs(root.left, res, depth); // depth already incremented

Хотя это приведет к очень небольшому быстрому выполнению из-за исключения одной арифметической операции, код труднее читать и может привести к ошибкам, если будет добавлен дополнительный код, который не ожидал изменения depth в методе.

Некоторые считают изменение значения параметров метода плохим стилем, хотя это руководство по стилю не является общепринятым в качестве наилучшей практики.

depth + 1 и depth++ совпадают по результату, но способ их исполнения отличается. depth = depth + 1 применяет результаты расчета к следующей операции. depth++ Сначала выполняет операцию над значением предварительного добавления, а затем добавляет единицу.

Другие вопросы по теме