iT邦幫忙

0

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

  • 分享至 

  • xImage
  •  

碎碎念

好啦嚴格說今天的不算是碎碎念,比較像是心得分享。我發現在解這些題目的過程,我自己的思路會有很大的開拓與改變,而那些嚴格的測資也會讓我知道不可以作弊(欸),算是相當的食用。而且我在一開始就決定要用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

總之這題的關鍵是要掌握樹的結構
然後在每一排找最大值
順帶一題,他說這個叫做廣度優先搜索,我還在看這是什麼東東


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言