FTPrep, 129 Sum Root to Leaf Numbers

来源:互联网 发布:java unix时间戳 时区 编辑:程序博客网 时间:2024/06/05 05:06

这道题还是比较顺手,基于之前对各种题型的分析。虽然没有给出具体的list in list 的输出类型,但是 这就是树形的pathSum一样的traversal过程。而且是无条件收集所有pathSum,对比两题的interface,看argumentlist的参数数量,就知道,这里的话因为是收集所有path所以少了一个 target sum的参数。但是套路都是一样的。每个path 的终结是左右子节点是null,该path的sum相当于item,没往下走一层 item = root.val + 10* item. 同时要记得要进行“逆反应” 这个参数 就可以直接在interface里面变化,就像 generateValidParens或者 phoneNumber那道题的方式。但是最终结果,还是要单独用一个类来存贮,因为你这里的helperfunction是void类型。我取名为:backtrackingAccumulate还比较达意。所以这道题的归类应该是: 树形 pathSum,特点是:隐形backtracking,interface里少一个targetSum。

代码如下:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public int sumNumbers(TreeNode root) {        if(root==null) return 0;        int[] result= new int[1];        backtrackingAccumulate(root, 0, result);        return result[0];    }        private void backtrackingAccumulate(TreeNode root, int singlePathSum, int[] totalPathSum){        if(root.left==null && root.right==null){            singlePathSum=singlePathSum*10+root.val;            totalPathSum[0]+=singlePathSum;            singlePathSum=(singlePathSum-root.val)/10;        }        if(root.left!=null) backtrackingAccumulate(root.left, singlePathSum*10+root.val, totalPathSum);        if(root.right!=null) backtrackingAccumulate(root.right, singlePathSum*10+root.val, totalPathSum);    }}// 睡前一道题。非常舒服,这个多余的变量要用一个类来代替,array或者arraylist都可以。// 另外,在解题困难的时候,要极力想回归原型。这是遍历么?pre-, in-, post- order traversal? 不是! 是从root 到 leaf的遍历,那就立马想到了,backtracking的模型了。有一个singlePath的变量(相当于一个item, a list), 然后还有个所有的path的集合(相当于result, list in list)。所以是需要加和上去的。// 原型找到了,只需要根据题型,变换下ops即可。// AC了还是蛮爽的,可以早点休息了  :)

Okay,感觉到这里,关于树的题目大部分都出现了,而且把一些基本的题型,方法dfs,bfs,bt等等都有相应的题型了。所以应该也应该在我的图纸上画出一个大块关于树的解法了!

这个刷题的过程是长期的,放平心态,不是说一次就能进大公司,入职1年我肯定还是想跳别的公司的。做个5年职场生涯规划。




原创粉丝点击