题解 | #二分查找-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
全部评论

相关推荐

07-15 11:35
门头沟学院 Java
心里踏实多了,可以安心准备论文了
看不见我ffgh:牛哇佬,要不要来试一试pdd,部门氛围很好
京东开奖153人在聊
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-16 18:03
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务