二叉树根节点到叶子节点和为指定值的路径
深度优先遍历 一个很重要的地方 递归就是栈的概念 path 先加入节点 once.add(root.cal) 这样二叉树的路径就会一直累加 最后 递归到叶子节点了 就要开始减 path.remove(once.size()-1); 相当于 根节点到叶子节点的一条完成 path 也会被清空
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @param sum int整型
* @return int整型ArrayList<ArrayList<>>
*/
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> once = new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
// write code here
dfs(root,sum);
return res;
}
public void dfs(TreeNode root,int sum){
if(root == null){
return ;
}
once.add(root.val);
sum-= root.val;
if(root.left == null &&root.right==null && sum == 0){
ArrayList<Integer> clonedList = new ArrayList<>();
for (Integer num : once) {
clonedList.add(num);
}
res.add(clonedList);
}
if(root.left != null){
dfs(root.left,sum);
}
if(root.right != null){
dfs(root.right,sum);
}
once.remove(once.size()-1);
}
}