LeetCode——求根到叶子节点数字之和

Q:给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1->2->3,那么这条路径就用123来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:
1↵ / ↵ 2 3
根节点到叶子节点的路径1->2用数字12代替
根节点到叶子节点的路径1->3用数字13代替
所以答案为12+13=25

A:牵扯到树的一般就是递归。

    public static int sumNumbers(TreeNode root) {
        ArrayList<Integer> array = new ArrayList<>();
        if (root == null)
            return 0;
        int sum = root.val;
        if(root.left == null && root.right == null)//如果只有一个根节点
            array.add(sum);
        //如果根节点没有左右子树,就不是路径了
        if (root.left != null)
            dfs(array, sum, root.left);
        if (root.right != null)
            dfs(array, sum, root.right);
        int count = 0;
        for (Integer integer : array) {
            count += integer;
        }
        return count;
    }

    public static void dfs(ArrayList<Integer> array, int sum, TreeNode root) {
        if (root.left == null && root.right == null) {
            sum = sum * 10 + root.val;
            array.add(sum);
            return;
        }
        int temp = sum;//这里是避免在dfs left时改变sum
        if (root.left != null) {
            sum = sum * 10 + root.val;
            dfs(array, sum, root.left);
        }
        if (root.right != null) {
            temp = temp * 10 + root.val;
            dfs(array, temp, root.right);
        }
    }
原文地址:https://www.cnblogs.com/xym4869/p/12488444.html