2022-8-15 剑指offer-二叉树递归
给定一个二叉树的根节点 root
,和一个整数 targetSum
,求该二叉树里节点值之和等于 targetSum
的 路径 的数目。
路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode() {} 8 * TreeNode(int val) { this.val = val; } 9 * TreeNode(int val, TreeNode left, TreeNode right) { 10 * this.val = val; 11 * this.left = left; 12 * this.right = right; 13 * } 14 * } 15 */ 16 class Solution { 17 public int pathSum(TreeNode root, int targetSum) { 18 if (root==null) return 0; 19 return getSum(root,targetSum)+pathSum(root.left,targetSum)+pathSum(root.right,targetSum); 20 } 21 22 public int getSum(TreeNode root,int targetSum){ 23 // 以root为起点的路径 24 if (root==null) return 0; 25 if (targetSum==root.val) return getSum(root.left,targetSum-root.val)+getSum(root.right,targetSum-root.val)+1; 26 else return getSum(root.left,targetSum-root.val)+getSum(root.right,targetSum-root.val); 27 28 } 29 }
思路:pathsum为当前树的路径和,getsum为以当前节点为路径起点的路径和。则pathsum(root)=以当前根节点为起点的路径+左子树路径和+右子树路径和。
getsum函数,如果当前节点正好等于目标值,要+1,否则就是左子树且目标值减去节点值+右子树且目标值减去节点值。