题解 | #二叉树根节点到叶子节点和为指定值的路径#
二叉树根节点到叶子节点的所有路径和
http://www.nowcoder.com/practice/185a87cd29eb42049132aed873273e83
1. 首先遍历二叉树
将根节点到叶子结点的路径都保存下来,利用一个ArrayList<ArrayList<character>> paths 保存下</character>
public void findPaths(TreeNode root, ArrayList<Character> list, ArratList<ArrayList<Character>> paths){
if(root == null){
return;
}
ArrayList<Character> sublist = new ArrayList<>(list);
sublist.add(Character.forDigit(root.val, 10));
if(root.left == null && root.right == null){
paths.add(sublist);
return;
}else{
findPaths(root.left, sublist, paths);
findPaths(root.right, sublist, paths);
}
} 2. 然后将保存下来的路径相加。
public int sumNumbers(TreeNode root){
if(root == null){
return 0;
}
ArrayList<ArrayList<Character>> paths = new ArrayList<>();
findPaths(root, new ArrayList<Character>(), paths);
int sum = 0;
for(ArrayList<Character> path : paths){
StringBuilder sb = new StringBuilder();
for(char c : path){
sb.applend(c);
}
sum += Integer.parseInt(sb.toString());
}
return sum;
} 
查看16道真题和解析