力扣112 路径总和
题目:
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
叶子节点 是指没有子节点的节点。
示例:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。
思路:
递归,求和,遇到叶子节点比较sum和targetSum,相等则返回true。
class Solution {
int sum=0;
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root==null){
return false;
}
sum+=root.val;
return getPathSum(root,targetSum);
}
public boolean getPathSum(TreeNode root,int targetSum){
if(root.left==null&&root.right==null){//叶子节点
if(sum==targetSum){
return true;
}else{
return false;
}
}
if(root.left!=null){
sum+=root.left.val;
if(getPathSum(root.left,targetSum)) return true;
sum-=root.left.val;//回溯
}
if(root.right!=null){
sum+=root.right.val;
if(getPathSum(root.right,targetSum)) return true;
sum-=root.right.val;//回溯
}
return false;
}
}
也可以扣除,targetSum在遇见叶子节点时,能减至0,则返回true。
class Solution {
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root==null){
return false;
}
return getPathSum(root,targetSum-root.val);
}
public boolean getPathSum(TreeNode root,int targetSum){
if(root.left==null&&root.right==null){//叶子节点
if(targetSum==0){//扣掉沿途节点值
return true;
}else{
return false;
}
}
if(root.left!=null){
targetSum-=root.left.val;
if(getPathSum(root.left,targetSum)==true){
return true;
}
targetSum+=root.left.val;//回溯
}
if(root.right!=null){
targetSum-=root.right.val;
if(getPathSum(root.right,targetSum)==true){
return true;
}
targetSum+=root.right.val;//回溯
}
return false;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY