Я хочу понять функциональность следующего рекурсивного кода, который в основном печатает пути двоичного дерева.Строковый параметр во время рекурсии
//Node has int val; Node left; Node right;
public List<String> printPaths(Node root) {
List<String> paths = new ArrayList<String>();
printPaths(root, paths, Integer.toString(root.val)); //root is not null
return paths;
}
public void printPaths(Node root, List<String> paths, String onePath) {
if(root.left == null && root.right == null) {
paths.add(onePath);
}
if (root.left != null) {
printPaths(root.left, paths, onePath + Integer.toString(root.left.val));
}
if (root.right != null) {
printPaths(root.left, paths, onePath + Integer.toString(root.right.val));
}
}
Теперь это печатает собственные значения пути, но я не понимаю, что с тех пор я обновляю onePath & не сбросить его, как значение получает сбрасывается в root.val для каждого отдельного пути? Как значение onePath получает исходное значение двоичного дерева для каждого пути дерева даже после добавления «->» + val для предыдущего пути?