当前位置: 首页 > 后端技术 > Java

leetcode437.PathSumIIIPathSumIII(中)

时间:2023-04-01 15:44:08 Java

1.题目总结给定一个二叉树根节点和一个整数targetSum,求二叉树中节点值之和等于targetSum的路径数.路径不需要从根节点开始,也不需要结束在叶子节点,但路径方向必须是向下的(只能从父节点到子节点)。示例1:输入:root=[10,5,-3,3,2,null,11,3,-2,null,1],targetSum=8输出:3解释:有3条路径的和等于8,如图所示。例子2:输入:root=[5,4,8,11,null,13,4,7,2,null,null,5,1],targetSum=22输出:3提示:节点数的范围在二叉树中是[0,1000]-109<=Node.val<=109-1000<=targetSum<=1000来源:LeetCode链接:https://leetcode.cn/problems/...版权属于LeetCode全部联网。商业转载请联系官方授权,非商业转载请注明出处。2、解题思路的双层递归实现,注意情况的考虑:1、如果选择本节点加入路径,则必须继续添加连续节点,否则停止添加节点;2.如果不选择该节点加入路径,则必须重新考虑左右节点。因此,一个方便的方法是我们创建一个辅助函数,专门用于计算连续加入节点的路径。3.解题方法3.1Java实现/***定义一个二叉树节点。*公共类TreeNode{*intval;*左边的树节点;*正确的树节点;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNodeleft,TreeNoderight){*this.val=val;*this.left=左;*this.right=正确;*}*}*/classSolution{publicintpathSum(TreeNoderoot,inttargetSum){if(root==null){返回0;}返回pathSumStartWithRoot(root,targetSum)+pathSum(root.left,targetSum)+pathSum(root.right,targetSum);}/***注意这里的入参类型是long,否则不会通过下面的用例*这里root.val太大,targetNum-root.val太多会溢出最小整数值递归调用。将参数更改为longCan*[1000000000,1000000000,null,294967296,null,1000000000,null,1000000000,null,1000000000]*0*/intpathSumStartWithRoot(TreeNoderoot,longtargetSum){if(root==null0){返回}count=root.val==targetSum?1:0;计数+=pathSumStartWithRoot(root.left,targetSum-root.val);count+=pathSumStartWithRoot(root.right,targetSum-root.val);返回计数;