developS

Leetcode 题解 - 树

1. 题目 437 统计路径和等于一个数的路径数量

 1     public int pathSum(TreeNode root, int targetSum) {
 2         if(root == null)  return 0;
 3         int res=0;
 4         //分别记录从根节点开始  和从左右子结点开始的路径
 5         //root直接记录path   root.left/right作为新结点递归 
 6         res=path(root,targetSum)+pathSum(root.left,targetSum)+pathSum(root.right,targetSum);
 7         return res;
 8     }
 9 
10     private int path(TreeNode root ,int targetSum){
11         if(root == null){
12             return 0;
13         }
14         int result=0;
15         //递归到当前结点满足条件  路径+1
16         if(root.val == targetSum){
17             result++;
18         }
19         //递归以当前结点开始之后的路径 要减去刚刚使用的结点的值
20         result+=path(root.left,targetSum-root.val);
21         result+=path(root.right,targetSum-root.val);
22         return result;
23     }

2.题目 112 判断路径和是否等于一个数

 1     public boolean hasPathSum(TreeNode root, int targetSum) {
 2         //根结点为空  直接返回false
 3         if(root == null)  return false;
 4         //递归结束条件  到了叶子结点  看看当前结点值是否等于目标值
 5         if (root.left == null && root.right == null && root.val == targetSum) return true;
 6         //递归左子树
 7         if (hasPathSum(root.left, targetSum - root.val)) return true;
 8         //递归右子树
 9         if (hasPathSum(root.right, targetSum -root.val)) return true;
10         //当前路径到叶子结点时候   仍然不满足条件   返回false
11         return false;
12     }

总结5月31日

题目112是题目437的总结

在路径求和的基础上,增加为有多少条路径为总和

1.根结点开始

2.左子树.... 直到叶子结点(包括左子树的右子树,在3递归)

3.右子树.... 直到叶子结点(包括右子树的左孩子,在2递归)

posted on 2022-05-31 22:27  四十四次日落95  阅读(39)  评论(0)    收藏  举报