亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

怎樣實現從上到下打印python二叉樹

發布時間:2021-12-13 16:01:21 來源:億速云 閱讀:162 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關怎樣實現從上到下打印python二叉樹,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

題目描述

從上到下打印出二叉樹的每個節點,同一層的節點按照從左到右的順序打印。

  • 節點總數 <= 1000

題目樣例

示例

輸入

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

    3
   / \
  9  20
    /  \
   15   7
 
輸出

[3,9,20,15,7]

題目思考

  1. 哪些數據結構可以做到按層輸出?

解決方案

思路

  • 經典的 BFS 思路, 將當前節點的左右非空子節點追加到隊列結尾, 然后繼續往后遍歷隊列, 最終整個隊列就是最后的結果
  • 由于這里是樹, 所以每個節點只可能被加入隊列訪問一次, 無需額外的 visit 集合
  • 另外這道題不需要分開保存每一層的節點, 所以這里不需要記錄當前層的長度之類的情況, 可以直接一次循環搞定
  • 數據結構方面, 可以采用列表 + 動態的 for 循環(python 3 適用, 其他語言可能不支持遍歷過程中更改容器)或者雙端隊列 + while 循環(所有語言通用, 每次 pop 最左邊的元素作為當前節點)
  • 下面的代碼是個人覺得比較通用的 BFS 模板, 包括列表和雙端隊列兩種方式的實現, 適用于不需要單獨處理每一層節點的情況, 供大家參考

復雜度

  • 時間復雜度           O(N)
    • 每個節點只需要遍歷一次
  • 空間復雜度           O(N)
    • 額外需要一個列表/雙端隊列

代碼

方案 1 - 列表 + for 循環
class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        # 方案1: 列表+for循環
        if not root:
            return []
        q = [root]
        for node in q:
            # 只將非空子節點追加到隊列
            if node.left:
                q.append(node.left)
            if node.right:
                q.append(node.right)
        return [x.val for x in q]
 
方案 2 - 雙端隊列 + while 循環
import collections

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        # 方案2: 雙端隊列+while循環
        if not root:
            return []
        q = collections.deque([root])
        res = []
        while q:
            node = q.popleft()
            res.append(node.val)
            if node.left:
                q.append(node.left)
            if node.right:
                q.append(node.right)
        return res

上述就是小編為大家分享的怎樣實現從上到下打印python二叉樹了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

葵青区| 万山特区| 独山县| 襄汾县| 新竹县| 中方县| 新龙县| 息烽县| 综艺| 玉林市| 全南县| 十堰市| 高平市| 米脂县| 祥云县| 宝丰县| 闽清县| 瑞安市| 宁夏| 望江县| 孟村| 静海县| 京山县| 新河县| 朝阳区| 黄龙县| 西乌| 房产| 托克逊县| 棋牌| 建昌县| 沈阳市| 临沭县| 和顺县| 手游| 泸溪县| 金寨县| 融水| 宜章县| 丰镇市| 株洲县|