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递归)
浙公网安备 33010602011771号