题目名称:左叶子之和
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
解法
一、BFS
- BFS计算左叶子和,污染节点/节点标记
/**
* @param {TreeNode} root
* @return {number}
*/
var sumOfLeftLeaves = function (root) {
if (!root) return 0
let queue = [root]
let res = 0
while (queue.length) {
const stack = []
for (let node of queue) {
if (node.isLeft && !node.left && !node.right) {
res += node.val
continue
}
if (node.left) {
node.left.isLeft = true
stack.push(node.left)
}
node.right && stack.push(node.right)
}
queue = stack
}
return res
};
二、DFS
- DFS递归计算
/**
* @param {TreeNode} root
* @return {number}
*/
var sumOfLeftLeaves1 = function (root) {
if (!root) return 0
let res = 0
if (root.left) {
if (!root.left.left && !root.left.right) {
res += root.left.val
}
}
return res + sumOfLeftLeaves1(root.left) + sumOfLeftLeaves1(root.right)
};
总结
- 找到规律之后,DFS比BFS更加简洁
说明
- 本题解已同步leetcode-js-simple/11.[ 404 ] 左叶子之和,可以复制代码进行调试。
- 总结出了一套亲测有效的前端无痛刷题项目,有助于算法小白平稳入门,详见leetcode-js-roadmap,希望对从零开始刷题的前端小伙伴们带来帮助~
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情