【发布时间】:2015-11-05 00:13:51
【问题描述】:
我想了解以下递归代码的功能,它基本上打印二叉树的路径。
//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? 即使在我为前一个路径附加“->”+ val 之后,onePath 值如何重置为每个树路径的二叉树根值?
【问题讨论】: