30天Leetcode挑战(5):515 Largest value in each tree raw

碎碎念

好啦严格说今天的不算是碎碎念,比较像是心得分享。我发现在解这些题目的过程,我自己的思路会有很大的开拓与改变,而那些严格的测资也会让我知道不可以作弊(欸),算是相当的食用。而且我在一开始就决定要用GPT来做,也是大大的降低了我的参与门槛,讚。

题干

给定一个Tree,找出每一行里面最大的数值
这个树大概会长这样
1
23
4567
或者是
1
*2
**23
每个元素可以有两个子元素,也可能没有子元素

解题思路

我一开始以为是费波拿企树列
1
23
456
尝试扁平化之后受挫
因为树断掉之后根本就不能做

当然,GPT也是有给我一些把树正确扁平化的作法
但他给我的程式码又开始用deque了,我认真觉得要来学一下

class Solution:    def largestValues(self, root: Optional[TreeNode]) -> List[int]:        from collections import deque        if root is None:            return []                # 使用队列进行层序遍历,同时记录节点的层级        queue = deque([(root, 0)])  # (节点, 层级)        current_level = 0        current_level_max = float('-inf')  # 当前层的最大值        output = []        while queue:            node, level = queue.popleft()            if level > current_level:                # 我们已经进入了一个新的层级                output.append(current_level_max)                current_level = level                current_level_max = float('-inf')  # 重置最大值            if node.val > current_level_max:                current_level_max = node.val            if node.left is not None:                queue.append((node.left, level + 1))            if node.right is not None:                queue.append((node.right, level + 1))        # 添加最后一层的最大值        output.append(current_level_max)        return output

总之这题的关键是要掌握树的结构
然后在每一排找最大值
顺带一题,他说这个叫做广度优先搜索,我还在看这是什么东东


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章