給你二叉樹的根節點?root
?和一個整數目標和?targetSum
?,找出所有?從根節點到葉子節點?路徑總和等于給定目標和的路徑。
葉子節點?是指沒有子節點的節點。
public static List<List<Integer>> pathSum(TreeNode root, int targetSum) {List<List<Integer>> res=new ArrayList<>();List<Integer> list=new ArrayList<>(); //記錄每一個符合要求的路徑if(root==null) return res;res=findPathSum(root,res,list,targetSum);return res;}public static List<List<Integer>> findPathSum(TreeNode node, List<List<Integer>> path,List<Integer> list,int targetSum){list.add(node.val);//先判斷是否當前節點是否為葉子節點if(node.left==null && node.right==null){int sum=0;for(int i=0;i<list.size();i++){sum=sum+list.get(i);}if(sum==targetSum) {List<Integer> res=new ArrayList<>(list);//path.add(list)中存儲的為list對象,之后對list的任何操作都會影響結果//path.add(new ArrayList<>(list)) 時,path 中存儲的是 list 的一個副本,與list內容相同,但是為不同對象path.add(new ArrayList<>(list)); //符合要求,則加入path中};}//不為葉子節點時if(node.left!=null){findPathSum(node.left,path,list,targetSum);list.remove(list.size()-1);}if(node.right!=null){findPathSum(node.right,path,list,targetSum);list.remove(list.size()-1);}return path;}