溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎樣進行從上到下打印python二叉樹的分析

發(fā)布時間:2021-12-13 17:29:37 來源:億速云 閱讀:187 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了怎樣進行從上到下打印python二叉樹的分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

題目描述

從上到下按層打印二叉樹,同一層的節(jié)點按從左到右的順序打印,每一層打印到一行。

  • 節(jié)點總數(shù) <= 1000
     

題目樣例

示例

     
輸入

給定二叉樹: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
           
輸出
[
  [3],
  [9,20],
  [15,7]
]
           

題目思考

  1. 如何記錄當(dāng)前層的信息?
     

解決方案

     

思路

  • 相比昨天那道題, 這里需要把每層節(jié)點都單獨打印出來, 如果仍使用昨天的方法, 就無法知道每層的邊界在哪, 所以需要做出一些改變
  • 如果我們能夠記錄下當(dāng)前層的節(jié)點邊界, 然后當(dāng)前層的子節(jié)點都加入隊列后, 將隊列更新為從下一層節(jié)點起點開始, 這樣就確保每一層都單獨被記下來了
  • 這就是今天這道題的思路: 按照每層來循環(huán), 存當(dāng)前層的節(jié)點長度 curlen, 新追加的下層節(jié)點起點下標(biāo)自然就是 curlen, 所以當(dāng)前層遍歷完之后只需要將隊列切片成 curlen 及以后的部分即可
  • 同樣的, 由于是樹, 每個節(jié)點只需要遍歷一次, 所以不需要 visit 集合
  • 下面的代碼又是個人覺得比較通用的另一個 BFS 模板, 它適用于需要單獨處理每一層節(jié)點的情況, 供大家參考
     
復(fù)雜度
  • 時間復(fù)雜度         O(N)
    • 每個節(jié)點只需要遍歷一次
  • 空間復(fù)雜度         O(N)
    • 額外需要一個隊列
     
代碼
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        res = []
        if not root:
            return res
        q = [root]
        while q:
            # 當(dāng)前層長度
            curlen = len(q)
            curlevel = []
            for node in q[:curlen]:
                # 將當(dāng)前層的節(jié)點值依次加入結(jié)果中
                curlevel.append(node.val)
                # 只追加非空子節(jié)點
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)
            res.append(curlevel)
            # 隊列切片, 開始處理下一層
            q = q[curlen:]
        return res

上述內(nèi)容就是怎樣進行從上到下打印python二叉樹的分析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI