题解 | #二分查找-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
