溫馨提示×

溫馨提示×

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

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

如何從上到下打印python二叉樹

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

如何從上到下打印python二叉樹,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

題目描述

請實現(xiàn)一個函數(shù)按照之字形順序打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類推。

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

題目樣例

示例

輸入

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

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

題目思考

  1. 可以繼續(xù)利用昨天的方案嗎, 不行的話需要進行哪些改動?

解決方案

思路

  • 回顧昨天那道題           劍指 Offer 32 - II. 從上到下打印二叉樹 II - leetcode 劍指offer系列, 我們是單獨打印每一層的節(jié)點, 只不過都是從左到右的方向
  • 針對這道題, 我們可以額外維護一個變量, 記錄當前方向, 每次到下一層時就調(diào)換方向即可
  • 也就是說, 只需要對昨天題目的代碼稍加改動就能搞定, 所以熟練掌握前面兩種 BFS 的模板是很有必要的, 很多問題都能在它們基礎(chǔ)上解決
復雜度
  • 時間復雜度           O(N)
    • 每個節(jié)點只需要遍歷一次
  • 空間復雜度           O(N)
    • 額外需要一個隊列
代碼
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        res = []
        if not root:
            return res
        q = [root]
        # 初始從左到右遍歷
        fromleft = True
        while q:
            curlen = len(q)
            cur = []
            for node in q[:curlen]:
                cur.append(node.val)
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)
            if fromleft:
                res.append(cur)
            else:
                # 從右向左的話只需要將該層的值翻轉(zhuǎn)加入結(jié)果中即可
                res.append(cur[::-1])
            # 每一層結(jié)束后都調(diào)轉(zhuǎn)方向
            fromleft = not fromleft
            q = q[curlen:]
        return res
 

看完上述內(nèi)容,你們掌握如何從上到下打印python二叉樹的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(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