劍指offer刷題筆記-32.從上到下列印二叉樹 進階

geekfreakout發表於2020-10-03

在這裡插入圖片描述
涉及到二叉樹的題目一般用stack實現bfs或者dfs,最好避免迭代法。
題目分層列印,與從左到右列印類似,依然使用bfs。之字形列印,只需要一個判定語句區分奇偶層然後用collections.deque雙向佇列實現快速的逆向列印。
關於collections.deque的用法,見連結
寫程式碼思維練習:

  1. 確定函式的輸出res:list[list]
  2. 需要那些變數:一個deque用來儲存搜尋節點,另一個deque用來儲存每層的列印列表
  3. 主體while迴圈的結束條件: deque為空,也就是整個樹遍歷完畢時
  4. while迴圈中需要處理的事項: 1)deque pop本層的node。 2)儲存列印值(分奇偶)3)deque中存入所有本層節點的左右節點。
    程式碼如下
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root: return []
        res, deque = [], collections.deque([root])
        while deque:
            tmp = collections.deque()
            for _ in range(len(deque)):
                node = deque.popleft()
                if len(res)%2==0: tmp.append(node.val)
                else: tmp.appendleft(node.val)
                if node.left: deque.append(node.left)
                if node.right:deque.append(node.right)
            res.append(list(tmp))
        return res

注意deque最後要cast回list()再append進res

相關文章