碎碎念
好啦严格说今天的不算是碎碎念,比较像是心得分享。我发现在解这些题目的过程,我自己的思路会有很大的开拓与改变,而那些严格的测资也会让我知道不可以作弊(欸),算是相当的食用。而且我在一开始就决定要用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
总之这题的关键是要掌握树的结构
然后在每一排找最大值
顺带一题,他说这个叫做广度优先搜索,我还在看这是什么东东