力扣算法_429 N叉树的层序遍历

429 N叉树的层序遍历

题目

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

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

示例

  1. 在这里插入图片描述

    输入:root = [1,null,3,2,4,null,5,6]
    输出:[[1],[3,2,4],[5,6]]
    
  2. 在这里插入图片描述

输入: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]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]

思路

方法一:将树逐层遍历,首先将根节点存入列表queue中;然后记录列表的长度n,循环n次从左到右依次弹出queue中的节点,将该节点的子节点存入queue中,并将节点的值放入一个新列表lst中,当循环n次后,表明结束了一层的遍历,将lst存入结果列表res中。注:考虑根节点为空的情况

方法二:与方法一类似,不同的是,将当前层的节点和这些节点的子节点分开保存,分别保存到两个列表中;在循环当前层节点的列表nodes时,将这些节点的子节点保存在另一个列表nxt中,当循环结束后,将nxt的值重新赋给nodes同样也需要考虑节点为空的情况。方法二与方法一相比,执行时间变短,但小号内存变大。

代码

方法一:

class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children

class Solution:
    def levelOrder(self, root: 'Node') -> List[List[int]]:
        if not root: return []
        queue, res = [root], []
        while queue:
            n = len(queue)
            lst = []
            for _ in range(n):
                tmp = queue.pop(0)
                lst.append(tmp.val)
                for r in tmp.children: queue.append(r)
            res.append(lst)
        return res

方法二:

class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children

class Solution:
    def levelOrder(self, root: 'Node') -> List[List[int]]:
        if not root: return []
        nodes, res = [root], []
        while nodes:
            cur, nxt = [], []
            for node in nodes:
                cur.append(node.val)
                nxt += [child for child in node.children]
            nodes = nxt
            res.append(cur)
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值