【Leetcode_總結】102. 二叉樹的層次遍歷 - python
阿新 • • 發佈:2019-01-11
Q:
給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。
例如:
給定二叉樹: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其層次遍歷結果:
[ [3], [9,20], [15,7] ]
連結:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/description/
思路:利用佇列,由於輸出的關係,因此還需要統計一下層數
程式碼:
class Solution: def levelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ res = [] if root == None: return [] """利用佇列實現樹的層次遍歷""" from queue import Queue q = Queue() q.put((root,0)) while not q.empty(): node ,level = q.get() if level == len(res): res.append([]) res[level].append(node.val) flag = 0 if node.left != None: flag += 1 q.put((node.left,level+1)) if node.right != None: flag += 1 q.put((node.right, level + 1)) return res
另一種解法:也是利用佇列的思想,只是統計層數的過程不同
class Solution: def levelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ res = [] que = [root] if root == None: return res while que: tempList = [] for i in range(len(que)): node = que.pop(0) tempList.append(node.val) if node.left: que.append(node.left) if node.right: que.append(node.right) res.append(tempList) return res