原題鏈接:
112. 路徑總和
解題思路:
- 如果求根節點到葉子節點的路徑上的節點值之和,假設共有3個節點,那么寫成計算式是
val1 + val2 + val3 = sum
- 那么將計算式轉換就可以得到
val3 = sum - val1 - val2
- 也就是說,問題可以從求和轉換為,每向下查找一層節點,就將求和減去當前節點的值,最后只要判斷葉子節點的值
val3
,是否和最后sum - val1 - val2
相等即可 - 需要特別判斷的是:二叉樹為空,此時無值,返回false
/*** @param {TreeNode} root* @param {number} targetSum* @return {boolean}*/
var hasPathSum = function(root, targetSum) {// 如果二叉樹為空if (!root) return false// 如果當前節點沒有子節點,它就是葉子節點,只要判斷root.val === targetSumif (!root.left && !root.right) return root.val === targetSum// 每一層節點都將targetSum減去root.val,最后一層只要對比葉子節點的值是否等于targetSum// 最后將結果逐層向上返回return hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - root.val)
};