樹-廣度優先層次遍歷
阿新 • • 發佈:2020-07-26
102. 二叉樹的層序遍歷 給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。 示例: 二叉樹:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其層次遍歷結果: [ [3], [9,20], [15,7] ]
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left= None # self.right = None class Solution(object): def levelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ queue = collections.deque() queue.append(root) res = [] while queue: size = len(queue) level= [] for _ in range(size): cur = queue.popleft() if not cur: continue level.append(cur.val) queue.append(cur.left) queue.append(cur.right) if level: res.append(level)return res
BFS使用佇列,把每個還沒有搜尋到的點依次放入佇列,然後再彈出佇列的頭部元素當做當前遍歷點。BFS總共有兩個模板: 如果不需要確定當前遍歷到了哪一層,BFS模板如下。 while queue 不空: cur = queue.pop() for 節點 in cur的所有相鄰節點: if 該節點有效且未訪問過: queue.push(該節點) 如果要確定當前遍歷到了哪一層,BFS模板如下。 這裡增加了level表示當前遍歷到二叉樹中的哪一層了,也可以理解為在一個圖中,現在已經走了多少步了。size表示在當前遍歷層有多少個元素,也就是佇列中的元素數,我們把這些元素一次性遍歷完,即把當前層的所有元素都向外走了一步。 level = 0 while queue 不空: size = queue.size() while (size --) { cur = queue.pop() for 節點 in cur的所有相鄰節點: if 該節點有效且未被訪問過: queue.push(該節點) } level ++; 上面兩個是通用模板 作者:fuxuemingzhu 連結:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/tao-mo-ban-bfs-he-dfs-du-ke-yi-jie-jue-by-fuxuemin/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。View Code