zoukankan      html  css  js  c++  java
  • LeetCode 404.左叶子之和

    404. 左叶子之和

    Difficulty: 简单

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

    示例:

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

    Solution

    Language: ****

    思路一:迭代

    以下是错误解法:用层序遍历上瘾了。。。。

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    ​
    class Solution:
        def sumOfLeftLeaves(self, root: TreeNode) -> int:
            if not root:
                return 0
            queue, res, tmp = [root], 0, root.val
            while queue:
                size = len(queue)
                for i in range(size):
                    node = queue.pop(0)
                    if i == 0:
                        res += node.val
                    if node.left:
                        queue.append(node.left)
                    if node.right:
                        queue.append(node.right)
            return res-tmp
    

    以下是迭代思路的正确解法:

    class Solution:
        def sumOfLeftLeaves(self, root: TreeNode) -> int:
            if not root:
                return 0
            queue, res = [root], 0
            while queue:
                size = len(queue)
                for i in range(size):
                    node = queue.pop(0)
                    if node.left:
                        queue.append(node.left)
                        if not node.left.left and not node.left.right:  # 只有当左节点没有孩子节点的时候才符合左叶子节点的要求
                            res += node.left.val
                    if node.right:
                        queue.append(node.right)
            return res
    

    思路二:递归

    题意要求求所有的左叶子节点的和,那么对于一个节点,如果它的左节点没有孩子节点,说明它的左节点是叶子节点,此时需要把该左节点的值加到res中。然后我们可以在右节点上递归此步骤。

    class Solution:
        def sumOfLeftLeaves(self, root: TreeNode) -> int:
            if not root:
                return 0
            res = 0
            if root.left:
                if not root.left.left and not root.left.right:
                    res += root.left.val
                else:
                    res += self.sumOfLeftLeaves(root.left)
                    
            res += self.sumOfLeftLeaves(root.right)
            return res
    
  • 相关阅读:
    汇编笔记
    【BZOJ 1701】Cow School(斜率优化/动态凸包/分治优化)
    MS-DOS 6.22 +Vim+masm 汇编环境
    「NOIP2017」时间复杂度
    CCF 201809-3 元素选择器
    CCF 201712-3 Crontab
    ICPC NWERC2019~2020 Practice Contest
    蓝桥杯模拟赛3 F:等差等比有联系 公差公比求通项
    CCF 201509-3 模板生成系统
    CCF 201503-3 节日
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14094241.html
Copyright © 2011-2022 走看看