# 算法-01-二叉树根节点到叶子节点和为指定值的路径

## 描述

### Java

```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>> results= new ArrayList<>();

public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
// write code here
ArrayList<Integer> path =new ArrayList<>();
if(root==null)
return results;
dfs(root,0,sum,path);
return results;
}

public void dfs(TreeNode root,int nowSum, int sum, ArrayList<Integer> list){
if(root.right==null&&root.left==null&&sum==nowSum+root.val){
return;
}
if(root.left!=null){
dfs(root.left,nowSum+root.val,sum,list);
list.remove(list.size()-1);
}
if(root.right!=null){
dfs(root.right, nowSum+root.val,sum,list);
list.remove(list.size()-1);
}
}
}```

### Python

```# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

#
#
# @param root TreeNode类
# @param sum int整型
# @return int整型二维数组
#
class Solution:
def pathSum(self , root , sum ):
# write code here
path = []
paths = []
self.dfs(root,sum,path,paths)
return paths

def dfs(self, root: TreeNode, sum :int, path: list, paths: list):
if root is None:
return None
path.append(root.val)
if root.left is None and root.right is None and sum==root.val:
paths.append(path.copy())
else:
self.dfs(root.left,sum-root.val,path,paths)
self.dfs(root.right,sum-root.val,path,paths)
path.pop(len(path)-1)
```

(0)
(0)