二叉树根节点到叶子节点的所有路径数字和

给定一个仅包含数字 0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
找出根节点到叶子节点的所有路径表示的数字之和
例如:


image

12+13=25

思路:一开始自底向上叠加,即儿子节点的值10^(depth-1)+当前的值(一个节点就1,两个节点就2,然后父亲的高度为儿子中较高的+1,这样会有个问题,如果左右节点高度不平衡,即不一样,父亲在后续的计算是携带儿子的值的,后续向上计算的时候10^(depth-1)就会把矮的儿子的值拉高,总体的值可能拉高。
于是对于本题,采取自顶向下,核心伪代码就一条:
sum = cal_sum(left,sum)+cal_sum(right,sum) #即把左右两边的结果返回
具体如下:

 public int sumNumbers (TreeNode root) {
        int sum=0;
        return calSum(root,sum);
        // write code here
    }
    public int calSum(TreeNode root ,int pre_sum){
        if(root==null) return 0;
        int now_sum = pre_sum*10+root.val;
        if(root.left==null&&root.right==null)return now_sum;
        return calSum(root.left,now_sum)+calSum(root.right,now_sum);
    }

变式,如果画一个问法,从底部的叶子节点作为数字的最高位,你会怎么做?
没错,就是一开始的自底向上,左右儿子的结果10+自己当前值(1-2)10^(depth-1)就是该树的总值
sum = cal_sum(left,depth=1)+cal_sum(right,depth=1) +root.val
10^(depth-1)*(0~2)
具体就先不写,还没看到类似的题目

你可能感兴趣的:(二叉树根节点到叶子节点的所有路径数字和)