题解 | #二分查找-II#. 单队列:“气泡”元素表示新的一层
求二叉树的层序遍历
http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
队列Q 中用气泡元素None 把不同层的元素分隔开:
Q初始值为【root.val, None】
然后就是队列出入的遍历,特点是:
如果pop的时候遇到了气泡元素None, 就在队尾重新push 一个气泡元素None,而不进行其他操作。
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # # @param root TreeNode类 # @return int整型二维数组 # from collections import deque class Solution: def levelOrder(self , root ): # write code here def iter_child(node): if node.left: yield node.left if node.right: yield node.right if root == None: return [] Q = deque([root, None]) ans = [] tmp_ans = [root.val] while Q: q = Q.pop() if q == None: if tmp_ans: ans.append(tmp_ans) tmp_ans = [] Q.appendleft(None) if len(Q) == 1: break else: for c in iter_child(q): Q.appendleft(c) tmp_ans.append(c.val) return ans