2022-8-15 剑指offer-二叉树递归

剑指 Offer II 050. 向下的路径节点之和

难度中等

给定一个二叉树的根节点 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,否则就是左子树且目标值减去节点值+右子树且目标值减去节点值。

posted on 2022-08-15 10:44  阿ming  阅读(13)  评论(0编辑  收藏  举报

导航