2022-7-4 二叉树-深度遍历
给你二叉树的根节点 root
和一个整数目标和 targetSum
,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode() {} 8 * TreeNode(int val) { this.val = val; } 9 * TreeNode(int val, TreeNode left, TreeNode right) { 10 * this.val = val; 11 * this.left = left; 12 * this.right = right; 13 * } 14 * } 15 */ 16 class Solution { 17 int sum=0; 18 List<List<Integer>> ans=new ArrayList<>(); 19 public List<List<Integer>> pathSum(TreeNode root, int target) { 20 List<Integer> list=new ArrayList<>(); 21 dfs(root,target,list); 22 return ans; 23 } 24 25 public void dfs(TreeNode root,int target,List<Integer> list){ 26 if (root==null) return; 27 list.add(root.val); 28 sum+=root.val; 29 if (sum==target&&root.left==null&&root.right==null){ 30 ans.add(List.copyOf(list)); 31 } 32 //for (int x:list) System.out.print(x+" "); 33 dfs(root.left,target,list); 34 dfs(root.right,target,list); 35 sum-=root.val; 36 list.remove(list.size()-1); 37 //for (int x:list) System.out.print(x+" "); 38 } 39 }
思路:深度优先搜索,需要注意是到叶子节点,不是到任意一点。