1. 程式人生 > 其它 >【菜雞刷題-牛客網NC15】層序遍歷 || bfs || 層數計數 || python

【菜雞刷題-牛客網NC15】層序遍歷 || bfs || 層數計數 || python

技術標籤:資料結構與刷題二叉樹佇列資料結構


@author = YHR | 程式碼原創 | 創作不易!轉載請標明來源!


文章目錄


題目描述

給定一個二叉樹,返回該二叉樹層序遍歷的結果,(從左到右,一層一層地遍歷)
例如:
給定的二叉樹是:
在這裡插入圖片描述
在這裡插入圖片描述

題目重點

  1. 同一層從左到右按順序儲存;
  2. 每一層,對應於 陣列一個維度。
  3. 每一層的所有結點都存在陣列的同一維度裡;

思路關鍵詞: 層序遍歷 – bfs – 佇列 – 層數計數

要注意的有幾點:

  1. 與普通BFS層序遍歷,每次結點入隊不同,這裡入隊的是另一種結構: 【結點(node),層數(int)】 (root 結點的層數預設為0。)
  2. 每次佇列彈出隊首元素parent,他的左孩子如果存在,左孩子的層數一定等於parent層數+1,也就是層數等於parent[1]+1; 右孩子同理;
  3. 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