91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

怎樣實現從上到下打印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

柞水县| 合阳县| 无为县| 科尔| 和田县| 南木林县| 达孜县| 闽侯县| 洮南市| 内乡县| 金乡县| 威远县| 莱芜市| 衡山县| 苏尼特右旗| 温宿县| 沅陵县| 银川市| 五莲县| 富裕县| 宁阳县| 墨玉县| 集贤县| 沙坪坝区| 综艺| 黔西| 石狮市| 防城港市| 营山县| 甘德县| 上杭县| 盘山县| 西昌市| 郧西县| 东莞市| 平武县| 南江县| 阳江市| 大洼县| 攀枝花市| 拉孜县|