中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

發布時間:2021-12-13 15:51:00 來源:億速云 閱讀:193 作者:柒染 欄目:大數據

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

題目描述

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

  • 節點總數 <= 1000

題目樣例

示例

輸入

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

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

題目思考

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

解決方案

思路

  • 回顧昨天那道題           劍指 Offer 32 - II. 從上到下打印二叉樹 II - leetcode 劍指offer系列, 我們是單獨打印每一層的節點, 只不過都是從左到右的方向
  • 針對這道題, 我們可以額外維護一個變量, 記錄當前方向, 每次到下一層時就調換方向即可
  • 也就是說, 只需要對昨天題目的代碼稍加改動就能搞定, 所以熟練掌握前面兩種 BFS 的模板是很有必要的, 很多問題都能在它們基礎上解決
復雜度
  • 時間復雜度           O(N)
    • 每個節點只需要遍歷一次
  • 空間復雜度           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:
                # 從右向左的話只需要將該層的值翻轉加入結果中即可
                res.append(cur[::-1])
            # 每一層結束后都調轉方向
            fromleft = not fromleft
            q = q[curlen:]
        return res
 

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尉氏县| 邵阳市| 沁阳市| 汝阳县| 韶山市| 乌兰察布市| 平阴县| 陈巴尔虎旗| 敖汉旗| 峨眉山市| 即墨市| 安新县| 县级市| 华宁县| 琼结县| 通州市| 临桂县| 香港| 扎囊县| 读书| 阿鲁科尔沁旗| 亚东县| 边坝县| 宜兰县| 留坝县| 嘉义县| 大方县| 汉川市| 泌阳县| 临猗县| 城固县| 鹿邑县| 隆尧县| 四川省| 乐平市| 清水县| 金华市| 沧源| 丰城市| 兴隆县| 宁乡县|