1. 程式人生 > 實用技巧 >劍指 Offer 32 - I. 從上到下列印二叉樹(層序遍歷BFS)

劍指 Offer 32 - I. 從上到下列印二叉樹(層序遍歷BFS)

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



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

    3
   / \
  9  20
    /  \
   15   7
返回:

[3,9,20,15,7]


提示:

節點總數 <= 1000
  • 解法:層序遍歷

用一個雙端佇列(python有collections模組,時間複雜度為O(1))儲存當前左右子樹,然後不斷訪問雙端佇列把節點的值儲存到res陣列中。

解法類似求二叉樹深度:https://www.cnblogs.com/yeshengCqupt/p/13462456.html

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        queue = []
        res = []
        if not root:
            return []
        queue.append(root)
        res.append(root.val)
        while queue:
            tmp = []
            for node in queue:
                
if node.left: tmp.append(node.left) res.append(node.left.val) if node.right: tmp.append(node.right) res.append(node.right.val) queue = tmp return res

別人的程式碼:

class Solution:
    def levelOrder(self, root: TreeNode) -> List[int]:
        
if not root: return [] res = [] queue = collections.deque() queue.append(root) while queue: node = queue.popleft() res.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) return res