1.code
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
LinkedList<Integer> list = new LinkedList<>();
List<List<Integer>> listAll = new LinkedList<>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
pathSumHelp(root,sum);
return listAll;
}
public void pathSumHelp(TreeNode root,int sum){
if(root==null)return;
list.add(root.val);
int tar = sum-root.val;
if(tar==0&&root.left==null&&root.right==null){
listAll.add(new LinkedList(list));
}
pathSumHelp(root.left,tar);
pathSumHelp(root.right,tar);
list.removeLast();
}
}
2.题解分析
*运用递归的方式遍历二叉树
*运用LinkedList list = new LinkedList<>();保存中间路径,当到达一个叶子节点的时候,进行路径的判断。
*在每次遍历结束的时候,运用list.removeLast();将当前路径的最后的节点移除,返回到上一层的父节点,走另外的路径继续遍历。
*最后运用listAll.add(new LinkedList(list));保存每次满足条件的节点路径。