Leetcode——二叉樹的層次遍歷
阿新 • • 發佈:2018-12-30
給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。
例如:
給定二叉樹: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其層次遍歷結果:
[
[3],
[9,20],
[15,7]
]
思路:
層次遍歷需要藉助佇列這樣一個輔助的資料結構。
1.題目給出從左到右訪問節點,自然想到的就是BFS,廣度優先搜尋。每個節點訪問且僅訪問一次。所以時間複雜度是O(N),根節點先入佇列,然後佇列不空,取出頭元素,如果左孩子存在就入佇列,否則什麼都不做,右孩子同理。知道佇列為空,則表示樹層次遍歷結束。
2.深度優先搜尋DFS,也可以做。但是最好還是BFS
程式碼:(BFS)
class Solution: def levelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ if not root: return [] #若根節點為空,則返回空列表 result = [] #模擬一個佇列儲存節點 queue = collections.deque() #雙端佇列 queue.append(root) #首先將根節點入隊 while queue: level_size = len(queue) #記錄同層節點的個數 current_level = [] #使用列表來儲存同層節點 for _ in range(level_size): node = queue.popleft() #將同層節點依次出隊 current_level.append(node.val) if node.left: queue.append(node.left) #非空左孩子入隊 if node.right: queue.append(node.right) #非空右孩子入隊 result.append(current_level) return result