1. 程式人生 > 其它 >力扣刷題筆記:劍指 Offer 32 - III. 從上到下列印二叉樹 III(單純的列表、佇列queue,對二叉樹進行逐層遍歷,再將每層按奇偶分順逆序)

力扣刷題筆記:劍指 Offer 32 - III. 從上到下列印二叉樹 III(單純的列表、佇列queue,對二叉樹進行逐層遍歷,再將每層按奇偶分順逆序)

技術標籤:刷題筆記leetcodepython

題目:

劍指 Offer 32 - III、從上到下列印二叉樹 III

請實現一個函式按照之字形順序列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右到左的順序列印,第三行再按照從左到右的順序列印,其他行以此類推。

例如:
給定二叉樹: [3,9,20,null,null,15,7],
在這裡插入圖片描述

返回其層次遍歷結果:

[
[3],
[20,9],
[15,7]
]

提示:

節點總數 <= 1000

題解思路:

單純利用列表對二叉樹進行逐層遍歷,再將每層按奇偶分順逆序。

題解python程式碼:

# Definition for a binary tree node.
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] ans, queue = [], collections.deque() queue.append(
root) #初始化queue為root while queue: temp = [] #定義層輸出列表 for _ in range(len(queue)): node = queue.popleft() #取出queue最左的元素,並在queue新增左右子樹 if node.left: queue.append(node.left) if node.right: queue.append(node.right) temp.
append(node.val) #層輸出列表新增node的值 ans.append(temp[::-1] if len(ans)%2!=0 else temp) #按照ans的長度的奇偶情況,判斷是否需要逆序 return ans

在這裡插入圖片描述

作者:a-qing-ge
連結:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/solution/dan-chun-li-yong-lie-biao-dui-er-cha-shu-gjgu/
來源:力扣(LeetCode)https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/