剑指 Offer 34. 二叉树中和为某一值的路径
题目描述
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
解答
/**
* 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中
因为val值可能是负数,所以即使遇到和>target时,也要接着往下遍历
*/
public List<List<Integer>> pathSum(TreeNode root, int target) {
List<Integer> mid = new ArrayList<>();
List res = new ArrayList();
int sum = 0;
if(root == null){
return res;
}
preOrder(root,target,mid,res,sum);
return res;
}
public void preOrder(TreeNode root,int target,List<Integer> mid,List res,int sum){
mid.add(root.val);
sum += root.val;
if(sum == target){
if(root.left == null&&root.right == null){
res.add(new ArrayList(mid));
}
}
if(root.left != null){
preOrder(root.left,target,mid,res,sum);
}
if(root.right != null){
preOrder(root.right,target,mid,res,sum);
}
mid.remove(mid.size()-1); //回溯---删除最后一个,注意回溯时并不需要可以修改sum的值
//因为sum是非引用型的变量。
}
}