2022-7-4 二叉树-深度遍历

剑指 Offer 34. 二叉树中和为某一值的路径

难度中等

给你二叉树的根节点 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 }

思路:深度优先搜索,需要注意是到叶子节点,不是到任意一点。

posted on 2022-07-04 09:14  阿ming  阅读(24)  评论(0编辑  收藏  举报

导航