【leetcode-102】二叉樹的層序遍歷
阿新 • • 發佈:2020-07-17
給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。
題目分析
此題類似於《劍指offer》的第32題
層序遍歷二叉樹是指對二叉樹每一層從左到右進行訪問。
-
非葉子節點
對於每一層的非葉子節點,都有兩個子節點。在層序遍歷時,上一層非葉子節點的遍歷順序,和下一層的葉子節點的遍歷順序是相同的。
因此對於下一層的節點來說,可以在遍歷上一層節點時,使用容器儲存起來。
-
容器的選擇
可以觀察到節點的訪問順序與放入容器的順序是相同的,因此可以使用一個棧結構來儲存下層的節點。
-
每層遍歷開始和結束的判斷
因為要判斷每一層是否遍歷完,需要一個變數記錄每層的節點數目
-
將每層按照標準結果輸出
這道題需要把每層作為一個list新增到result中
實現程式碼
# 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 [] res = [] res_val = [] res.append(root) nextLevel = 0 toBeAppended = 1 temp = [] while len(res)>0: node = res.pop(0) temp.append(node.val) # 這裡一定注意要先放左節點再放右節點 ifnode.left: res.append(node.left) nextLevel +=1 if node.right: res.append(node.right) nextLevel +=1 #del res[0] toBeAppended -= 1 if toBeAppended == 0: res_val.append(temp) toBeAppended = nextLevel nextLevel = 0 temp = [] return res_val
# 實現方法2 # 使用容器代替計數 class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] res, curnodes = [], [root] while curnodes: curvals, nextnodes = [], [] for node in curnodes: curvals.append(node.val) if node.left: nextnodes.append(node.left) if node.right: nextnodes.append(node.right) res.append(curvals) curnodes = nextnodes return res