原题链接:
112. 路径总和
解题思路:
- 开始此题前,请先完成102. 二叉树的层序遍历的BFS解法
- 计算思路
- 如果求根节点到叶子节点的路径上的节点值之和,假设共有3个节点,那么写成计算式是
val1 + val2 + val3 = sum
- 那么将计算式转换就可以得到
val3 = sum - val1 - val2
- 也就是说,问题可以从求和转换为,每向下查找一层节点,就将求和减去当前节点的值,最后只要判断叶子节点的值
val3
,是否和最后sum - val1 - val2
相等即可
- 也就是说我们只要在每一层搜索时,缓存
targetSum
减去从当前节点到根节点的值的结果。
- 之后在搜索到叶子节点时,就可以直接对比叶子节点的值,与缓存结果是否相等即可
示例代码
var hasPathSum = function(root, targetSum) {
const queue = new Queue();
root && queue.enqueue({ node: root, val: targetSum })
while (queue.size()) {
let size = queue.size()
while (size--) {
const { node, val } = queue.dequeue()
if (!node.left && !node.right) {
if (node.val === val) {
return true
}
}
node.left && queue.enqueue({ node: node.left, val: val - node.val })
node.right && queue.enqueue({ node: node.right, val: val - node.val })
}
}
return false
};