劍指offer刷題筆記-32.從上到下列印二叉樹 進階
涉及到二叉樹的題目一般用stack實現bfs或者dfs,最好避免迭代法。
題目分層列印,與從左到右列印類似,依然使用bfs。之字形列印,只需要一個判定語句區分奇偶層然後用collections.deque雙向佇列實現快速的逆向列印。
關於collections.deque的用法,見連結
寫程式碼思維練習:
- 確定函式的輸出res:list[list]
- 需要那些變數:一個deque用來儲存搜尋節點,另一個deque用來儲存每層的列印列表
- 主體while迴圈的結束條件: deque為空,也就是整個樹遍歷完畢時
- 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
相關文章
- 劍指 Offer 32 - II. 從上到下列印二叉樹 II 做題筆記二叉樹筆記
- LeetCode 劍指offer——從上到下列印二叉樹 II、從上到下列印二叉樹 IIILeetCode二叉樹
- 劍指 Offer 32 - I. 從上到下列印二叉樹(java解題)二叉樹Java
- 劍指 Offer 32 - III. 從上到下列印二叉樹 III二叉樹
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- [劍指offer] 把二叉樹列印成多行二叉樹
- 劍指Offer系列刷題筆記彙總筆記
- 劍指offer刷題記錄
- 32 從上到下列印二叉樹二叉樹
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- ✏️ JavaScript版 | 10大專題 | 劍指offer刷題筆記 ✏️JavaScript筆記
- 【Warrior刷題筆記】劍指offer 32. 三道題,讓你學會二叉樹的深度廣度優先遍歷與遞迴迭代技術筆記二叉樹遞迴
- LeetCode-劍指Offer刷題記錄LeetCode
- 劍指offer--把二叉樹列印成多行(C++)二叉樹C++
- 刷題記錄:劍指offer+遇到的筆試題+LeetCode筆試LeetCode
- 劍指offer——重建二叉樹二叉樹
- 劍指offer(四)重建二叉樹二叉樹
- 每日一練(19):從上到下列印二叉樹二叉樹
- 劍指offer刷題day02
- 劍指 Offer 07. 重建二叉樹二叉樹
- 從上到下遍歷二叉樹-Java二叉樹Java
- 劍指Offer-40-二叉樹的深度二叉樹
- 劍指offer——二叉樹的深度C++二叉樹C++
- 【劍指offer】27. 二叉樹的映象二叉樹
- 劍指offer——二叉樹的映象C++二叉樹C++
- 劍指offer | 55 - I. 二叉樹的深度二叉樹
- 力扣 - 劍指 Offer 27. 二叉樹的映象力扣二叉樹
- 劍指OFFER-從頭到尾列印連結串列(Java)Java
- 劍指offer(java實現)第4題“重建二叉樹”-牛客網Java二叉樹
- 劍指offer——跳臺階
- # 劍指 Offer 68 - II. 二叉樹的最近公共祖先二叉樹
- 《劍指offer》之在完全二叉樹中新增子節點二叉樹
- 劍指offer-從尾到頭列印連結串列-phpPHP
- 劍指 Offer 列印從1到最大n位數c++C++
- 3. 從尾到頭列印連結串列(劍指offer)
- 劍指offer之順序列印陣列陣列
- [劍指offer] 二叉搜尋樹的後序遍歷序列
- leetcode 102 劍指Offer 32 二叉樹的層次遍歷LeetCode二叉樹