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

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务