• 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
    
  • 相关阅读:
    html转义
    mongodb 数据库 基础使用
    xpath基本语法
    HTTP
    JavaScript笔记6-数组新方法
    JavaScript笔记5-事件
    JavaScript笔记3--标识符和保留字
    JavaScript笔记4-数组
    jquery笔记1--选择器
    JavaScript笔记2
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14094241.html
Copyright © 2020-2023  润新知