8.27 112. 路径总和
给你二叉树的根节点 root
和一个表示目标和的整数 targetSum
。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum
。如果存在,返回 true
;否则,返回 false
。
叶子节点 是指没有子节点的节点。
我的思路:
深度优先遍历,最开始是想用加法的,但是每一次递归的话sum都会被初始化,无法进行连续的加。
使用减法,每次遍历到最后一个节点
注意:递归出口,要判断是否为叶子节点,遍历左右子树也要返回值
我的代码:
var hasPathSum = function(root, targetSum) {
if(!root) return false;
targetSum -= root.val;
// 判断是否为叶子节点
if(root.left === null && root.right === null) return targetSum === 0;
return hasPathSum(root.left,targetSum) || hasPathSum(root.right,targetSum);
};
总结:这段代码通过递归深度优先遍历二叉树,利用减法逐步减少目标值,并在到达叶子节点时判断剩余值是否为零。若存在从根到叶子节点的路径使得路径和等于目标值,则返回 true,否则返回 false。递归过程中,只要任一子树满足条件即终止遍历,确保高效性。