欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode-左叶子之和

程序员文章站 2022-05-20 21:34:58
...

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

示例:

    3
   / \
  9  20
    /  \
   15   7

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-left-leaves
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

递归的思想:

根节点左叶子之和 = 根节点左子树的左叶子之和 + 根节点右子树的左叶子节点之和

以节点pNode为根的子树中左叶子之和 = pNode左子树的左叶子之和 + pNode右子树的左叶子节点之和

如果当前节点pLeaf是叶子节点且是左节点,那么以节点pLeaf为根的子树左叶子之和 = pLeaf.val

如果当前节点pLeaf是叶子节点且是右节点,那么以节点pLeaf为根的子树左叶子之和 = 0

因此代码如下:

# Definition for a binary tree node.
class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution(object):
    def sumOfLeftLeaves(self, root):
        return self.sumLeft(root, False)
        
    def sumLeft(self, root, bLeft):
        if root==None:
            return 0
        
        #  check if root is left leave
        if root.left==None and root.right==None and bLeft:
            return root.val
    
        return self.sumLeft(root.left, True) + self.sumLeft(root.right, False)

 

相关标签: 数学与算法