Допустим, currDepth = 0
В вашей первой версии два рекурсивных вызова будут выглядеть следующим образом:
traverse(root.right, ans, 1);
traverse(root.left, ans, 1);
Это правильно, потому что вы хотите, чтобы оба рекурсивных вызова перешли наследующий уровень.
В вашей второй версии это выглядит следующим образом:
traverse(root.right, ans, 1);
traverse(root.left, ans, 2);
Это означает, что первый рекурсивный вызов работает нормально, но второй неверен (пропускает один уровень).
Почему?Вы изменили ваш currDepth
параметр.Первая версия вашего кода не меняет его.Проходит currDepth + 1
на следующий уровень.