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 0let res = 0const 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. 提交结果

