亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

BFS 以每個順序檢索值的元素

BFS 以每個順序檢索值的元素

森欄 2022-01-05 19:36:03
我試圖解決二叉樹級別順序遍歷問題 - LeetCode給定一棵二叉樹,返回其節點值的層序遍歷。(即從左到右,一層一層)。例如:給定二叉樹[3,9,20,null,null,15,7],    3   / \  9  20    /  \   15   7返回其層序遍歷為:[  [3],  [9,20],  [15,7]]我的方案很直觀,BFS遍歷收集每一層的值from collections import dequeclass Solution:    def levelOrder(self, root):        if not root: return [] #base case         res = []        #queue to colloct all the nodes        queue = deque([root])         while queue:            level_vals = [] #hold the values at the current level.            for _ in range(len(queue)): #evalute once before execution enter the loop                cur = queue.popleft()                if node.left:                    queue.append(cur.left)                if node.right:                    queue.append(cur.right)                level_vals.append(cur.val)            res.append(level_vals)        return res 我在討論區閱讀了這樣的 bfs 和隊列解決方案# BFS + dequedef levelOrder(self, root):    res, queue = [], deque([(root, 0)])    while queue:        cur, level = queue.popleft()        if cur:            if len(res) < level+1:                res.append([])            res[level].append(cur.val)            queue.append((cur.left, level+1))            queue.append((cur.right, level+1))    return res我對條件檢查感到困惑if len(res) < level+1:   res.append([]),并認為它可以是 '        if cur:            #if len(res) < level+1:            res.append([])            res[level].append(cur.val)            queue.append((cur.left, level+1))            queue.append((cur.right, level+1))    return res為什么需要條件檢查?
查看完整描述

1 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

條件檢查在那里,以便res僅當在queue. 如果沒有檢查,代碼將一個新的空數組追加到res為每個節點遇到queue。


讓我們看看當您運行帶有條件檢查的代碼時會發生什么。對于您的示例樹,首先從隊列中彈出值為 3 的根節點。此時的長度res為0,level也是0。所以,len(res) > level + 1是真實的。因此,將附加一個新的空數組res來存儲樹級別 0 的值。處理級別 1 的第一個節點(值為 9)時的情況也是如此。但是,處理完之后,當我們開始處理級別 1 的第二個節點(值為 20)時,該res數組有 2 個元素(每個級別一個)并且級別的值為 1。len(res) > level + 1為 false 并且沒有插入任何內容res。


如果沒有那個檢查,在迭代結束時 res 數組將是這樣的:


[

  [3],

  [9, 20],

  [15, 7],

  [],

  []

]

請注意,因為您的樹中有 5 個節點,所以總共附加了 5 個數組,res但只有前 3 個被占用,因為您的樹有 3 個級別。


查看完整回答
反對 回復 2022-01-05
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號