原题目
主要就是一个深度优先,深度优先本来就是用来解决图的问题
1.原题目
public List<List<Integer>>
pathSum(TreeNode root,
int sum) {
List<List<Integer>> result =
new ArrayList<>();
List<Integer> item =
new ArrayList<>();
if (root ==
null) {
return result;
}
dfs(root, sum, item, result);
return result;
}
public void dfs(TreeNode root,
int sum, List<Integer> item, List<List<Integer>> result) {
if (root ==
null) {
return;
}
item.add(root.val);
sum -= root.val;
if (root.left ==
null && root.right ==
null) {
if (sum ==
0) {
result.add(
new ArrayList<>(item));
}
}
else {
if (root.left !=
null) {
dfs(root.left, sum, item, result);
}
if (root.right !=
null) {
dfs(root.right, sum, item, result);
}
}
item.remove(item.size() -
1);
}
2.变形:求从根节点到所有叶子节点的路径
public List<List<Integer>>
pathAll(TreeNode root){
List<List<Integer>> result=
new ArrayList<>();
List<Integer> item=
new ArrayList<>();
if(root==
null){
return result;
}
dfs(root,item,result);
return result;
}
public void dfs(TreeNode root,List<Integer> item,List<List<Integer>> result){
if(root==
null){
return ;
}
item.add(root.val);
if(root.left==
null&&root.right==
null){
result.add(
new ArrayList<>(item));
}
else {
if(root.left!=
null){
dfs(root.left,item,result);
}
if(root.right!=
null){
dfs(root.right,item,result);
}
}
item.remove(item.size()-
1);
}
3.求最长路径,最短路径
求出所有路径了,,,判断路径长短还不简单?