题目链接:面试题34. 二叉树中和为某一值的路径
题目描述:
这个题首先看就是一个普普通通的深搜,遍历一遍就出答案了,然后我踩了两个坑(因为没好好审题)说一下
- 起初以为起点随便从哪里开始都可以,于是先存了一下所有节点
- 没注意终点必须是叶节点(叶节点的定义是下面没有其他节点的节点),最坑的样例就是[1,2] 1返回null,[1] 1 返回[[1]].
然后就是非常简单的题了:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
List<List<Integer>> ans;
List<Integer> temp;
public List<List<Integer>> pathSum(TreeNode root, int target) {
if(root==null) return new ArrayList();
ans=new ArrayList<>();
temp=new ArrayList<>();
gettemp(root,target,root.val );
return ans;
}
public void gettemp(TreeNode root,int target,int num){
temp.add(root.val);
//判断是不是叶节点
if(num==target&&root.left==null&&root.right==null){ ans.add(new ArrayList<>(temp));temp.remove(temp.size()-1); return;}
if(root.left!=null) gettemp(root.left,target,num+root.left.val);
if(root.right!=null) gettemp(root.right,target,num+root.right.val);
temp.remove(temp.size()-1);
}
}