429. N叉树的层序遍历

给定一个N叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。

例如,给定一个 3叉树 :

返回其层序遍历:

[
[1],
[3,2,4],
[5,6]
]

说明:

树的深度不会超过 1000
树的节点总数不会超过 5000

思路:

  • 与之前的二叉树层次遍历类似,用队列实现
  • 每个节点出队列时,将其子节点压入队列中
  • 在输出中树的每一行需要单独保存,标记每行最右的节点判断是否需要换行
  • 当前节点等于最右的节点时,下一层的最右节点是最新压入队列中的元素,需要注意的是,当遍历最后一行的最右节点后,队列为空,额外需要判断
"""
# Definition for a Node.
class Node(object):
    def __init__(self, val, children):
        self.val = val
        self.children = children
"""
class Solution(object):
    def levelOrder(self, root):
        """
        :type root: Node
        :rtype: List[List[int]]
        """
        
        if not root:
            return []
        
        result, temp, queue = [], [], []
        current_layer_right = root
        queue.append(root)
        while queue:
            current_node = queue.pop(0)
            temp.append(current_node.val)
            
            current_node_children = current_node.children
            
            if current_node_children:
                queue.extend(current_node_children)
            
            if current_node == current_layer_right:
                if queue:
                    current_layer_right = queue[-1]    # next layer last node
                result.append(temp)
                temp = []
        
        return result
posted @ 2018-09-17 11:37  yuyin  阅读(162)  评论(0)    收藏  举报