【菜雞刷題-牛客網NC15】層序遍歷 || bfs || 層數計數 || python
阿新 • • 發佈:2021-02-01
@author = YHR | 程式碼原創 | 創作不易!轉載請標明來源!
文章目錄
題目描述
給定一個二叉樹,返回該二叉樹層序遍歷的結果,(從左到右,一層一層地遍歷)
例如:
給定的二叉樹是:
題目重點
- 同一層從左到右按順序儲存;
- 每一層,對應於 陣列一個維度。
- 每一層的所有結點都存在陣列的同一維度裡;
思路關鍵詞: 層序遍歷 – bfs – 佇列 – 層數計數
要注意的有幾點:
- 與普通BFS層序遍歷,每次結點入隊不同,這裡入隊的是另一種結構: 【結點(node),層數(int)】 (root 結點的層數預設為0。)
- 每次佇列彈出隊首元素parent,他的左孩子如果存在,左孩子的層數一定等於parent層數+1,也就是層數等於parent[1]+1; 右孩子同理;
- parent 存入order數組裡,根據parent[1]記載的層數,確認存在order的第幾維度裡,如果order的維度(len(order)-1) < parent[1],order新增一個維度。
python程式碼
class Solution:
def levelOrder(self , root):
# write code here
if root is None:
order = []
else:
order = [[]]
queue = []
queue.append([root, 0])
# 第一項記載點, 第二項記載當前點所在的層數
while len(queue) > 0:
parent = queue.pop(0)
# 比較當前層數是否超過order維度
if len(order)-1 >= parent[1]:
# 沒超過,存入對應維度
order[parent[1]].append(parent[0].val)
else:
# 超過,新增一維,用於儲存parent
order.append([])
order[parent[1]].append(parent[0].val)
if parent[0].left is not None:
queue.append([parent[0].left, parent[1]+1])
if parent[0].right is not None:
queue.append([parent[0].right, parent[1]+1])
return order