1. 题目描述
计算给定二叉树的所有左叶子之和。示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
2. 解题思路
对于这道题目,我们可以对二叉树进行层序遍历,初始化一个对来queue来保存当前层的元素,遍历队列中的元素,如果该节点的左子树不存在左右子树,说明它是一个左叶子节点,将其加在结果上。
复杂度分析:
- 时间复杂度:O(n),最坏的情况下,也就是二叉树只有右子树,而形成一个链表的时候,我们需要遍历完整个二叉树,时间复杂度就是 O(n);
空间复杂度:O(n),其中n表示队列的长度,这个长度永远小于等于二叉树的节点的数量。
3. 代码实现
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var sumOfLeftLeaves = function(root) {
if(!root) return 0
let res = 0
const queue = [root]
while(queue.length){
const cur = queue.shift()
if(cur.left){
if(!cur.left.left && !cur.left.right){
res += cur.left.val
}
queue.push(cur.left)
}
if(cur.right){
queue.push(cur.right)
}
}
return res
};
4. 提交结果