[LeetCode题解] 1302.层数最深叶子节点的和

题目链接: https://leetcode-cn.com/problems/deepest-leaves-sum/.
这道题很明显是对于树的层序遍历。

解法一:

class Solution(object):
	def deepestLeavesSum(self, root):
	    """
	    :type root: TreeNode
	    :rtype: int
	    """
	    if not root:
	        return 0
	    val_depth = []
	    self.help(root, val_depth, 0)
	    max_depth = max([ele[1] for ele in val_depth])
	    return sum([ele[0] for ele in val_depth if ele[1] == max_depth])
	    
    def help(self, node, result, depth):
	    if not node:
	        return
	    result.append((node.val, depth))
	    self.help(node.left, result, depth + 1)
	    self.help(node.right, result, depth + 1)

解法一的短板很明显,通过DFS记录每一个节点的值和层信息,最后计算层数最大的叶子节点的值的和。
其需要遍历多次,且空间复杂度为O(n)

解法二:

class Solution(object):
    max_depth = 0
    result_sum = 0
    def deepestLeavesSum(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        self.help(root, 0)
        return self.result_sum

    def help(self, node, depth):
        if not node:
            return
        if not node.left and not node.right: #最底层的节点肯定是leaf
            if self.max_depth == depth:
                self.result_sum += node.val
            elif self.max_depth < depth:
                self.max_depth = depth
                self.result_sum = node.val #清空之前记录的和
        else:
            self.help(node.left, depth + 1)
            self.help(node.right, depth + 1)

解法二通过变量记录"max_depth"和max_depth的和,因为只有Leaf节点可能为层数最深,所以当遍历到Leaf时,我们对于max_depth, result_sum进行更新。

发布了10 篇原创文章 · 获赞 0 · 访问量 133

猜你喜欢

转载自blog.csdn.net/m0_46134602/article/details/103811564