【Leetcode】404. Sum of Left Leaves 解题报告

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dpengwang/article/details/87942999

在这里插入图片描述
求二叉树的所有左叶子节点值的和

思路

判断一个点是不是左叶子节点,要么根据他的父节点判断,父节点的左孩子为叶子,则满足条件,要么给每个节点带一个左右子树的标志位,如果是叶子节点且位于左子树则是左叶子节点

可以写出以下六种方法。
class Solution1:
    def sumOfLeftLeaves(self, root):
        res = 0
        if root == None:
            return 0
        if root.left != None:
            if root.left.left == None and root.left.right == None:
                res += root.left.val
            else:
                res += self.sumOfLeftLeaves(root.left)
        res += self.sumOfLeftLeaves(root.right)
        return res
        
class Solution1.1(object):
    def sumOfLeftLeaves(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root == None:
            return 0
        if root.left and root.left.left == None and root.left.right == None:
            return root.left.val + self.sumOfLeftLeaves(root.right)
        else:
            return self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)

class Solution2:
    def sumOfLeftLeaves(self, root):
        res = 0
        if root == None:
            return res
        stack = [root]
        while(len(stack)):
            node =stack.pop()
            if node.left != None:
                if node.left.left == None and node.left.right == None:
                    res += node.left.val
                else:
                    # 此时压栈的肯定不是叶子节点
                    stack.append(node.left)

            if node.right:
                    stack.append(node.right)
        return res

class Solution3(object):
    def sumOfLeftLeaves(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root == None:
            return 0
        res = [0]
        self.sumofLeft(root, res, False)
        return res[0]


    def sumofLeft(self, node, sum_array, isLeft):
        if node.left == None and node.right == None and isLeft:
            sum_array[0] += node.val
        else:
            if node.left:
                self.sumofLeft(node.left, sum_array, True)
            if node.right:
                self.sumofLeft(node.right, sum_array, False)

class Solution4(object):
    def sumOfLeftLeaves(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root == None:
            return 0
        from collections import  deque
        queue = deque()
        res = 0
        queue.append(root)
        while(len(queue)):
            node = queue.popleft()
            if node.left != None:
                if node.left.left == None and node.left.right == None:
                    res += node.val
                else:
                    queue.append(node.left)
            if node.right:
                queue.append(node.right)
        return res

class Solution5(object):
    def sumOfLeftLeaves(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root == None:
            return 0
        res = 0
        stack =[[root, False]]
        while(len(stack)):
            node, isLeft = stack.pop()
            if node.left == None and node.right == None and isLeft:
                res += node.val
            else:
                if node.left:
                    stack.append([node.left, True])
                if node.right:
                    stack.append([node.right, False])
        return res


class Solution6(object):
    def sumOfLeftLeaves(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root == None:
            return 0
        from collections import deque
        queue = deque()
        queue.append([root, False])
        res = 0
        while(len(queue)):
            node,isLetf =queue.popleft()
            if node.left == None and node.right == None and isLetf:
                res += node.val
            else:
                if node.left:
                    queue.append([node.left, True])
                if node.right:
                    queue.append([node.right, False])
        return res

猜你喜欢

转载自blog.csdn.net/dpengwang/article/details/87942999