LeetCode129题---求根节点到叶子结点数字之和

LeetCode129题—求根节点到叶子结点数字之和

给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字:
例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
计算从根节点到叶节点生成的 所有数字之和 。 叶节点 是指没有子节点的节点。

输入:root = [1,2,3]
输出:25
解释:
从根到叶子节点路径 1->2 代表数字 12
从根到叶子节点路径 1->3 代表数字 13
因此,数字总和 = 12 + 13 = 25

思路:
根节点到叶子节点生成的数字,每当树的层数多一层时,数就会扩大十倍。我们每当遍历到叶子节点时,就将这些数存储到一个List中,最后遍历List集合求和

或者每次遇到叶子节点时就将数返回,不是叶子节点就加上节点的值

//0ms
    public int sumNumbers(TreeNode root) {
        return Sum(root , 0); //初始和为0.
    }

    public int Sum(TreeNode root,int value){
        if(root == null){
            return 0;
        }
        int num = value * 10 + root.val; //求数,每多一层就要扩大十倍
        //如果是叶子节点,就将数返回
        if(root.left == null && root.right == null){
            return num;
        }
        //左子树和右子树的和加起来
        return Sum(root.left , num) + Sum(root.right , num);
    }
//1ms
    public int sumNumbers(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        int sum = 0;
        DFS(root,0,list);
        for(Integer num : list){
            sum += num;
        }
        return sum;
    }

    public void DFS(TreeNode root ,int num ,List<Integer> list ){
        if(root == null){
            return;
        }
        //判断为叶子节点,就将数存储起来
        if(root.left == null && root.right == null ){
            num += root.val;
            list.add(num);
        }
        num += root.val; //如果不是叶子节点就加上当前节点的值
        DFS(root.left,num*10,list);
        DFS(root.right,num*10,list);
    }

递归:

你可能感兴趣的:(LeetCode题解,二叉树,leetcode)