1161 最大层内元素和(dfs)

1. 问题描述:

给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中最小的那个

示例:

输入:[1,7,0,7,-8,null,null]
输出:2
解释:
第 1 层各元素之和为 1,
第 2 层各元素之和为 7 + 0 = 7,
第 3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。

提示:

树中的节点数介于 1 和 10 ^ 4 之间
-10 ^ 5 <= node.val <= 10 ^ 5

2. 思路分析:

 对于树的相关操作都是可以使用dfs(深度优先搜索)或者是bfs(广度优先搜索)去解决的,这里使用的是dfs来解决的,其中主要是遍历节点的过程中需要清楚当前节点是属于哪一层的节点,我们可以在dfs方法中使用一个遍历来记录当前节点属于第几层的节点,当往下递归调用的时候就可以知道当前的节点属于第几层了,我们可以声明一个字典来记录每一层节点的总和,在递归的过程中进行累加求和,当递归方法结束的时候就可以知道每一层的节点的总和是多少了,最后遍历一下字典找出最大的值对应的键返回即可,总体的思路还是比较容易理解的。

3. 代码如下:

import collections


class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:
    # dfs方法中传入一个参数来记录使处理起来很方便
    def dfs(self, root: TreeNode, level: int, dic: dict):
        if root is None: return
        if level not in dic:
            dic[level] = root.val
        else:
            dic[level] += root.val
        self.dfs(root.left, level + 1, dic)
        self.dfs(root.right, level + 1, dic)

    def maxLevelSum(self, root: TreeNode) -> int:
        dic = collections.defaultdict(set)
        self.dfs(root, 1, dic)
        # 根据最大的值返回第一个键
        return max(dic, key=dic.get)


if __name__ == '__main__':
    h = TreeNode(989)
    r = TreeNode(10250)
    rl = TreeNode(98693)
    rr = TreeNode(-89388)
    rrr = TreeNode(-32127)
    h.right = r
    r.left = rl
    r.right = rr
    rr.right = rrr
    print(Solution().maxLevelSum(h))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值