本人新手为了面试互联网公司,将刷题做一个记录以及总结,方便之后学习!!
第30道问题 剑指offer 34为一道简单题
题目:
力扣https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/
1.自己分析
这个题要求得一个数的和,每次遍历下二叉树,利用target值做递减,当target为0的情况下,也就是说明了达到了目标数之和。
同时这种题,每一次遍历一个数,如果不合适就返回上一个可能得数,是利用回溯方法的典型题。
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int target) {
//构造输出
LinkedList<List<Integer>> list = new LinkedList<List<Integer>>();
LinkedList<Integer> list1 = new LinkedList<>();
back(list,list1,target,root);
return list;
}
public void back(List<List<Integer>> list,LinkedList<Integer> list1,int target,TreeNode root){
if(root == null){//输出到叶子了
return ;
}
list1.add(root.val);//加入这个点的值到list1
target = target-root.val;//目标值减去节点值
if(target == 0 && root.left == null && root.right ==null){//说明这个是叶子节点,满足终止条件
list.add(new LinkedList(list1));
}
back(list,list1,target,root.left);
back(list,list1,target,root.right);
list1.removeLast();//如果不满足条件,把新加入到list1的节点值去掉
}
}
结果:
总结:
1.每天得做题,要不然就没有感觉,哪怕题型直到也得去找以前做过类似的题。