美文网首页
129. 求根到叶子节点数字之和

129. 求根到叶子节点数字之和

作者: youzhihua | 来源:发表于2019-12-14 14:44 被阅读0次

    题目描述

    给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。

    例如,从根到叶子节点路径 1->2->3 代表数字 123。

    计算从根到叶子节点生成的所有数字之和。

    说明: 叶子节点是指没有子节点的节点。

    示例:

    输入: [4,9,0,5,1]
        4
       / \
      9   0
     / \
    5   1
    输出: 1026
    解释:
    从根到叶子节点路径 4->9->5 代表数字 495.
    从根到叶子节点路径 4->9->1 代表数字 491.
    从根到叶子节点路径 4->0 代表数字 40.
    因此,数字总和 = 495 + 491 + 40 = 1026.
    

    思路

    1.可以从题干中根节点到叶子结点的路径看出,此题为二叉树前序遍历的变种。
    2.使用curNum保存当前拼接的数字,使用nums保存所有拼接好的数字,若当前结点为叶子结点,将curNum加上当前数值后放入nums即可,结束递归即可。
    3.遍历nums中的num,并将其与sum相加,就是最终结果。

    Java代码实现

    class Solution {
        public int sumNumbers(TreeNode root) {
            List<String> nums = new ArrayList<>();
            sumNumbers(root,"",nums);
            int sum = 0;
            for (String num:nums) {
                if(!"".equals(num))
                    sum = sum + Integer.parseInt(num);
            }
            return sum;
        }
    
        private void sumNumbers(TreeNode root,String curNum,List<String> nums){
            if(root == null){
                return;
            }
            if(root.left == null && root.right == null){
                nums.add(curNum+root.val);
                return;
            }
            sumNumbers(root.left,curNum+root.val,nums);
            sumNumbers(root.right,curNum+root.val,nums);
        }
    }
    

    相关文章

      网友评论

          本文标题:129. 求根到叶子节点数字之和

          本文链接:https://www.haomeiwen.com/subject/kzbcnctx.html