题解 | #二叉树根节点到叶子节点和为指定值的路径#
二叉树根节点到叶子节点的所有路径和
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; }