Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tree Level Order Traversal)


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

例如,给定一个 3叉树 :

返回其层序遍历:

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

说明:

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

分析:

广度优先搜索,又可以叫层次遍历,就像这题,我们一层一层地遍历这个树。

广度优先搜索需要一个Queue,Queue的创建在Java中可以使用Queue<Object> queue = new LinkedList<>();

关于Queue的函数的区别,请点击学习笔记之Java队列Queue中offer/add函数,poll/remove函数,peek/element函数的区别进行了解。

这题,我们首先new一个Queue,然后把根节点加入。

然后,一个条件while(!Queue.isEmpty()),即如果队列不为空,则一直循环,若队列为空,证明已经搜索完毕。

进入这个循环后,我们把队列里的所有元素一个一个取出来,再把它们的children节点加进去。

在这个途中,我们记录下每个节点的值,最后返回答案。

举例:

题中这个三叉树,我们首先把1加入队列。

队列的状态如下: 1

然后取1出来,把1的子节点都加入

队列的状态如下: 3 2 4

取3出来,把3的子节点加入

队列的状态如下: 2 4 5 6

取2,把2的子节点加入,2没有子节点

队列的状态如下: 4 5 6

取4,把4的子节点加入,4没有子节点

队列的状态如下: 5 6

取5,5没有子节点

队列的状态如下: 6

取6,6没有子节点

队列的状态如下: 空

发现队列为空,结束,初学者可以自己按照题目的例子,在纸上写一遍BFS的流程,方便理解。

总的来说,BFS就是把下一层可以达到的点/节点,全部加入到队列中,所以称之为层次遍历。

这题的AC代码:

/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children; public Node() {} public Node(int _val,List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> ans = new ArrayList<>();
if (root == null) return ans;
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
int size = queue.size();
List<Integer> list = new ArrayList<>();
for(int i=0;i<size;i++){
Node node = queue.poll();
list.add(node.val);
for(Node n:node.children){
queue.offer(n);
}
}
ans.add(list); }
return ans;
}
}

Leetcode之广度优先搜索(BFS)专题-详解429. N叉树的层序遍历(N-ary Tree Level Order Traversal)的更多相关文章

  1. LeetCode 102. 二叉树的层次遍历(Binary Tree Level Order Traversal) 8

    102. 二叉树的层次遍历 102. Binary Tree Level Order Traversal 题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 每 ...

  2. [LeetCode] Binary Tree Level Order Traversal 二叉树层序遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  3. [LeetCode] 102. Binary Tree Level Order Traversal 二叉树层序遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  4. [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  5. LeetCode之Binary Tree Level Order Traversal 层序遍历二叉树

    Binary Tree Level Order Traversal 题目描述: Given a binary tree, return the level order traversal of its ...

  6. [LeetCode] N-ary Tree Level Order Traversal N叉树层序遍历

    Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  7. 【leetcode】Binary Tree Level Order Traversal I & II

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  8. LeetCode:Binary Tree Level Order Traversal I II

    LeetCode:Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of ...

  9. 【一天一道LeetCode】#107. Binary Tree Level Order Traversal II

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...

随机推荐

  1. window平台下 cmd 命令窗口的编码设置

    在WINDOWS上打开控制台界面,发现默认的编码是GBK,这样有时候写完的代码运行的时候就会出码,基于此,查阅各方资料,终于得出两种方案. 一.临时解决方案(只针对本次会话有效) 1. 打开控制台,输 ...

  2. github项目readme.md文件如何编写

    参考链接:http://blog.csdn.net/Bone_ACE/article/details/48318675

  3. ubuntu 单机配置hadoop

    前言 因为是课程要求,所以在自己电脑上安装了hadoop,由于没有使用虚拟机,所以使用单机模拟hadoop的使用,可以上传文件,下载文件. 1.安装配置JDK Ubuntu18.04是自带Java1. ...

  4. Atlassian In Action-Jira之二次开发(五)

    到现在已经写到了第五章节,实际上离Jira的官方系统已经越来越远,本章节的内容基本上已经完全脱离了Jira这个系统本身,而是依赖Jira的API接口和数据库进行开发了.主要包含如下几个功能: 人员任务 ...

  5. Java中Random随机数

    java中一般有两种随机数,一个是Math中random()方法,一个是Random类. 一.Math.random() 随即生成0<=x<1的小数. 实例:如何写,生成随机生成出0~10 ...

  6. kudu集群高可用搭建

    首先咱得有KUDU安装包 这里就不提供直接下载地址了(因为有5G,我 的服务器网卡只有4M,你们下的很慢) 这里使用的是CDH版本 官方下载地址http://archive.cloudera.com/ ...

  7. 02-Kubenetes资源

    目录 Kubenetes资源 常用资源对象 标签labels 创建资源的方式 Pod pods.spec.containers 必须 nodeSelector <map [string]stri ...

  8. textarea的拖拽怎么解决

    textarea文本域在页面中是可以拖动的,即时你给了固定的宽度和高度,但这在我们页面布局中,使我们不需要的,因为可拖拽很多时候会影响我们页面的布局和整体的美观度. css3提供了一个resize属性 ...

  9. BrowserSync,自动刷新,解放F5,去掉更新提示

    BrowserSync虽然这个技术不算新,但是依然有用.略微介绍下 没有安装node,先安装node,这里不再做介绍 安装 npm install -g browser-sync  全局安装,方便在任 ...

  10. Android--SharedPreferences数据存储方案

            SharedPreferences是使用键值对的形式存储的,并且支持多种不同的数据类型,存的是String,取得值也是String.         使用SharedPreferenc ...