N叉树的层序遍历_腐烂的橘子
【摘要】 广度优先搜索模型Bfs(){ //1. 建立起始步骤,队列初始化 //2. 遍历队列中的每一种可能, whlie(队列不为空){ 通过队头元素带出下一步的所有可能,并且依次入队 { 判断当前情况是否达成目标:按照目标要求处理逻辑 } 继续遍历队列中的剩余情况 }} N叉树的层序遍历N叉树的层序遍历class Solution { p...
广度优先搜索模型
Bfs(){
//1. 建立起始步骤,队列初始化
//2. 遍历队列中的每一种可能,
whlie(队列不为空){
通过队头元素带出下一步的所有可能,并且依次入队
{
判断当前情况是否达成目标:按照目标要求处理逻辑
}
继续遍历队列中的剩余情况
}
}
N叉树的层序遍历
class Solution {
public List<List<Integer>> levelOrder(Node root) {
//保存结果集
List<List<Integer>> result = new LinkedList<>();
if(root==null){
return result;
}
Queue<Node> q = new LinkedList<>();//队列!
q.offer(root);//将根节点入队
while (!q.isEmpty()){//队列为空结束遍历!
int size = q.size();//拿到这一层的节点个数!
//保存这一层的节点!
List<Integer> ret = new LinkedList<>();
while (size-->0){//处理这一层的每一个节点!
Node cur = q.poll();//该节点出队
ret.add(cur.val);//保存该节点value
for(Node x:cur.children){
//将这一节点的所有子节点入队!
q.offer(x);
}
}
result.add(ret);//保存这一层节点
}
return result;
}
}
腐烂的橘子
class pair{//用来存坐标位置!
int x;
int y;
public pair(int x,int y){
this.x = x;
this.y = y;
}
}
class Solution {
public int orangesRotting(int[][] grid) {
int row = grid.length;
int col = grid[0].length;
int step = 0;//记录分钟数
//上下左右
int[][] nextP = {{1,0},{-1,0},{0,-1},{0,1}};
Queue<pair> q = new LinkedList<>();
//初始化,找到第一个烂橘子位置入队!
for(int i = 0;i<row;i++){
for(int j=0;j<col;j++){
if(grid[i][j]==2){
q.offer(new pair(i,j));
}
}
}
while(!q.isEmpty()){
int size = q.size();
boolean flag = false;//标记是否腐烂过!
while(size-->0){
//出队该节点!
pair cur = q.poll();
//处理该节点的周围方向!
for(int i = 0;i<nextP.length;i++){
int x = cur.x + nextP[i][0];
int y = cur.y + nextP[i][1];
if(x>=row||x<0||y>=col||y<0){
//越界!
continue;
}
if(grid[x][y]==1){//周围是新鲜水果就腐烂!
grid[x][y] = 2;
q.offer(new pair(x,y));//入队
flag = true;
}
}
}
if(flag){//这一层腐烂过!
step++;
}
}
for(int i = 0;i<row;i++){
for(int j = 0;j<col;j++){
if(grid[i][j]==1){//说明还有新鲜水果!
return -1;
}
}
}
return step;
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)