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

相关推荐

用户64975461947315:这不很正常吗,2个月开实习证明,这个薪资也还算合理,深圳Java好多150不包吃不包住呢,而且也提前和你说了没有转正机会,现在贼多牛马公司骗你说毕业转正,你辛辛苦苦干了半年拿到毕业证,后面和你说没hc了😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务