N叉树的层序遍历

本文介绍了如何使用BFS算法解决N叉树的层序遍历问题,通过定义队列和结果列表,逐层遍历节点及其子节点,最终返回所有节点值的层序序列。
摘要由CSDN通过智能技术生成

1.题目

这道题是2024-2-17的签到题,题目难度为中等。

考察的知识点为BFS算法(树的层序遍历)。

题目链接:N叉树的层序遍历

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

2.思路

        对于这道题,我觉得要比二叉树的层序遍历要简单许多。为啥?因为二叉树的Node子结点属性是left和right,而N叉树的Node子结点属性是children,其中children是一个子结点列表。因此我们可以直接用循环来遍历它的子结点列表,不需要判断是否为空。

        因此,这道题还是先定义一个结点队列q和一个结果列表rst。然后定义一个循环用来判断节点队列q是否为空。当满足条件的时候,我们再定义两个临时列表,分别是:

tmp:存储下一层的结点队列

r:保存这一层的结点值

        然后我们直接用for循环遍历当前层的结点队列q,将每个结点的值添加到r里面,并进行二次循环,用于添加它的子结点到tmp队列中

        遍历结束后我们将当前层的结果r添加到rst列表中,方便最后我们返回结果;同时我们不要忘记刷新当前的结点队列为tmp(下一层的结点队列)。

3.代码

"""
# Definition for a Node.
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]]:
        # 如果root结点为空
        if not root:
            return []
        # 定义结果列表
        rst = []
        # 定义当前层的结点队列
        q = [root]
        # 判断当前层节点队列是否为空
        while len(q) > 0:
            # 临时队列tmp:下一层的结点队列
            # 当前层结果列表r,保存每个结点的值
            tmp,r = [],[]
            # 遍历当前层的结点
            for node in q:
                # 添加值到r里面
                r.append(node.val)
                # 遍历每个结点的子结点列表
                for child in node.children:
                    # 添加到下一层结点队列tmp里面
                    tmp.append(child)
            # 更新队列
            q = tmp
            # 添加当前层的结果列表到rst里面
            rst.append(r)
        return rst

        

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小人物₍˄·͈༝·͈˄*₎◞ ̑̑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值