leetcode 112 路径总和 JavaScript 思路: 看到这种树状的,首先想到的是DFS,通过递归的方式,每次递归都把当前节点的val值减掉,也就是sumTarget-root.val,递归到最后一个节点,也就是叶子结点时,如果参数中的targetSum被减到0 说明这条路可行,返回true。如果左递归和右递归均返回false,则返回false (递归代码我感觉还是挺难理解的,思路一想就对,代码一写就跪,主要是要想办法让null的时候或者遍历,到末尾叶子结点的时候能够卡住,return相应的值)
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {boolean}
*/
var hasPathSum = function(root, targetSum) {
if(root == null)
return false;
if(root.left==null&&root.right==null)
return targetSum-root.val == 0;
return hasPathSum(root.left,targetSum-root.val) || hasPathSum(root.right,targetSum-root.val);
};
简单解析一下代码(可能不太对,仅个人理解): ①root == null主要是用于卡住空树以及 遍历过程中root.left或者root.right当且仅当其中一个为null,最后一条return||的其中一条进入后为空情况 ②为了能够在叶子结点中卡住,对应叶子结点的条件为:root.left == null&&root.right == null 这时是最后一次相减了,如果满足条件,相减结果肯定是0的 ③最后一个return,是用于递归左子树和右子树的,通过①和②的条件把整个递归完成。
|