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

递归:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

且-听风吟.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值