

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root == null){
return false;
}
//到叶子节点
if(root.left == null && root.right == null){
return root.val == targetSum;
}
//计算出剩余的值
int remainSum = targetSum – root.val;
//递归左右子树
boolean leftResult = hasPathSum(root.left,remainSum);
boolean rightResult = hasPathSum(root.right,remainSum);
//只判断其中之一满足即可
return leftResult || rightResult;
}
}
不知道大家刚开始做递归类的题目会不会一头雾水完全没有思路,好像代码能看清楚但是自己上手就是不知道怎么开始,下面简单介绍一下我的心得供大家参考。
一:
当我们在做题的时候千万不要用脑子去想它去了左边然后是右边然后是…..,我们只需要把这个递归函数当作是一个已经写好的靠谱的API,你只需要将参数传进去即可,至于底下怎么跑的不需要管。
二:
分三步:第一函数的递归出口是什么;第二拆解子问题,也就是我只要管自己这一层,剩下的交给左边右边,就不管了;第三在拿到下面汇报上来的数据后我作为当前节点该怎么处理。
三:
使用纸笔在纸上画一个只有根节点A左节点B右节点C的树进行分析,好看一些,这个三节点的只要行的通那么节点更多的也能行得通。
然后找几个递归的题目使用上面的步骤练习一下。
关注我带你每天刷题!!!



