好啦嚴格說今天的不算是碎碎念,比較像是心得分享。我發現在解這些題目的過程,我自己的思路會有很大的開拓與改變,而那些嚴格的測資也會讓我知道不可以作弊(欸),算是相當的食用。而且我在一開始就決定要用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
總之這題的關鍵是要掌握樹的結構
然後在每一排找最大值
順帶一題,他說這個叫做廣度優先搜索,我還在看這是什麼東東