劍指 Offer 32 - I. 從上到下列印二叉樹(層序遍歷BFS)
阿新 • • 發佈:2020-08-12
- 題目描述
從上到下打印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。 例如: 給定二叉樹:[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