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;
}