leetcode-404:左叶子之和

简介: leetcode-404:左叶子之和

题目

题目链接

计算给定二叉树的所有左叶子之和。

示例:

3
   / \
  9  20
    /  \
   15   7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

解题

方法一:BFS

python解法

注意题目中写的是 左叶子节点,不是左子节点.

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def sumOfLeftLeaves(self, root: TreeNode) -> int:
        if not root:
            return 0
        queue = [root]
        num = 0
        while queue:
            l = len(queue)
            for i in range(l):
                cur = queue.pop(0)
                left,right = cur.left,cur.right
                if left:# 判断左子节点
                    queue.append(left)
                    if not (left.left or left.right):# 判断叶子节点
                        num+=left.val
                if right:
                    queue.append(right)
        return num

c++解法

由于只有根节点的情况是不算的左叶子节点的,所以不能考虑根节点,直接在if left 里面判断是否为叶子节点就行了

class Solution {
public:
    int sumOfLeftLeaves(TreeNode* root) {
        if(!root) return 0;
        queue<TreeNode*> queue;
        queue.push(root);
        int res=0;
        while(!queue.empty()){
            TreeNode* cur=queue.front();
            queue.pop();
            if(cur->left){
                queue.push(cur->left);
                if(!(cur->left->left||cur->left->right)){
                    res+=cur->left->val;
                }
            }
            if(cur->right){
                queue.push(cur->right);
            }  
        }
        return res;
    }
};

java写法

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if(root==null) return 0;
        Queue<TreeNode> q=new LinkedList<>();
        q.add(root);
        int res=0;
        while(!q.isEmpty()){
            TreeNode cur=q.poll();
            if(cur.left!=null){
                if(cur.left.left==null&&cur.left.right==null){
                    res+=cur.left.val;
                }
                q.add(cur.left);
            }
            if(cur.right!=null){
                q.add(cur.right);
            }
        }
        return res;
    }
}


相关文章
|
2月前
leetcode404左叶子之和刷题打卡
leetcode404左叶子之和刷题打卡
13 0
|
算法
LeetCode每日1题--左叶子之和
LeetCode每日1题--左叶子之和
71 0
leetcode 404 左叶子之和
leetcode 404 左叶子之和
55 0
leetcode 404 左叶子之和
|
算法 Java Python
ACM 选手图解 LeetCode 左叶子之和
ACM 选手图解 LeetCode 左叶子之和
ACM 选手图解 LeetCode 左叶子之和
|
18天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
18天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
19天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
|
19天前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
19天前
|
算法 容器
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题:水果成篮、找到字符串中所有字母异位词