题目描述:
标签:树 深度优先搜索 回溯 二叉树
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
代码:
思路分析:利用回溯方法
1、递归结束条件:当前结点为null,则直接返回;
2、将当前结点值添加入path,并将相应的target相应减去当前结点值,做以下两种情况判断:
①如果当前traget==0说明路径和满足条件,还要判断当前结点是不是叶子结点,是的话将path添加到ans中;
②否则,递归左子结点,之后再递归右子结点。
/**
* 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 = new ArrayList<>();
List<Integer> path = new ArrayList<>();
public List<List<Integer>> pathSum(TreeNode root, int target) {
backTracing(root, target);
return ans;
}
public void backTracing(TreeNode node, int target){
if(node == null){
return;
}
path.add(node.val);
target -= node.val;
if(target == 0 && node.left == null && node.right == null){
ans.add(new ArrayList<>(path));
}else{
backTracing(node.left, target);
backTracing(node.right, target);
}
path.remove(path.size() - 1);
}
}