leetcode 429. N-ary Tree Level Order Traversal(python)

371 阅读2分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第5篇文章,点击查看活动详情

描述

Given an n-ary tree, return the level order traversal of its nodes' values.

Nary-Tree input serialization is represented in their level order traversal, each group of children is separated by the null value (See examples).

Example 1:

Input: root = [1,null,3,2,4,null,5,6]
Output: [[1],[3,2,4],[5,6]]

Example 2:

Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
Output: [[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

Note:

The height of the n-ary tree is less than or equal to 1000
The total number of nodes is between [0, 10^4]

解析

根据题意,给定一个 n 叉树,按层级遍历顺序返回其节点值。题目中还给出了层级遍历的概念,以及输入的 N 叉树形式。

这道题其实就是考察使用层级遍历方式完成 N 叉树的层级遍历,大体思路和二叉树的层级遍历一样,我们使用一个队列 deque 来保存节点,然后使用循环进行遍历 deque 的操作,每次循环我们将当前层的节点从左到右依次弹出并放入 tmp 中进行记录,并将每个弹出节点的下一层的节点挨个依次追加到 deque 的末尾,当前层遍历结束之后将 tmp 追加到 result 中,如此循环结束之后,最后返回 result 就是按照层级遍历的结果。

时间复杂度为 O(N) ,空间复杂度为 O(N) 。

解答

class Solution(object):
    def levelOrder(self, root):
        """
        :type root: Node
        :rtype: List[List[int]]
        """
        if not root:
            return []
        deque = collections.deque([root])
        result = []
        while deque:
            tmp = []
            for _ in range(len(deque)):
                x = deque.popleft()
                tmp.append(x.val)
                for node in x.children:
                    deque.append(node)
            result.append(tmp)
        return result

运行结果

Runtime: 60 ms, faster than 52.05% of Python online submissions for N-ary Tree Level Order Traversal.

Memory Usage: 16.6 MB, less than 19.56% of Python online submissions for N-ary Tree Level Order Traversal.

原题链接

https://leetcode.com/problems/n-ary-tree-level-order-traversal/

您的支持是我最大的动力