题目
思路
思路一:
使用DFS来做
想到这个是应为每次得到一条路径的时候,如果他不是目标路径,我们回退的时候,是需要把路径上面节点的值减去的,这个让我想到了DFS在每次调用的时候函数里面都可以一开始加上这个值最后减去这个值
思路二:
递归的方法
分解为找寻子树是是sum-root。val的值的路径
结束条件是一个没有孩子的节点的值是sum的值或者该节点是一个空节点。
代码
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
import java.util.*;
public class Solution {
/**
*
* @param root TreeNode类
* @param sum int整型
* @return bool布尔型
*/
int val=0;
int pathVal=0;
public boolean DFS(TreeNode root){
if(root==null)return false;
pathVal+=root.val;
boolean r=false,l=false;
if(root.right!=null){
r=DFS(root.right);
}
if(root.left!=null){
l=DFS(root.left);
}
if(root.left==null&&root.right==null&&val==pathVal){
return true;
}
pathVal-=root.val;
return r||l;
}
public boolean hasPathSum (TreeNode root, int sum) {
val=sum;
if(root==null)return false;
return DFS(root);
}
}
```
方法二:
```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 bool布尔型
*/
public boolean hasPathSum (TreeNode root, int sum) {
if(root==null)return false;
return hasPathSum_p(root,sum);
}
public boolean hasPathSum_p (TreeNode root, int sum) {
// write code here
if(root==null)return false;
if(root.left==null&&root.right==null&&root.val==sum)return true;
return hasPathSum_p(root.left,sum-root.val)||hasPathSum_p(root.right,sum-root.val);
}
}
```