day21【代码随想录】二叉树的层序遍历、二叉树的层序遍历|| 、二叉树的层平均值 、二叉树的锯齿形层序遍历 、二叉树的右视图 、N叉树的层序遍历
创始人
2024-04-23 10:03:33

文章目录

  • 前言
  • 一、二叉树的层序遍历(力扣102)
  • 二、二叉树的层序遍历||(力扣107)
  • 三、二叉树的层平均值(力扣637)
  • 四、二叉树的锯齿形层序遍历(力扣103)
  • 五、二叉树的右视图(力扣199)
  • 六、N叉树的层序遍历(力扣429)


前言

1、二叉树的层序遍历
2、二叉树的层序遍历||
3、二叉树的层平均值
4、二叉树的锯齿形层序遍历
5、二叉树的右视图
6、N叉树的层序遍历


一、二叉树的层序遍历(力扣102)

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List> resList = new ArrayList>();public List> levelOrder(TreeNode root) {checkFun02(root);return resList;}public void checkFun02(TreeNode node){if(node==null){return ;}Queue que = new LinkedList();//根节点入队que.offer(node);while(!que.isEmpty()){List itemList = new ArrayList();int len = que.size();while(len-->0){//弹出结点TreeNode tmpNode = que.poll();//记录itemList.add(tmpNode.val);//左右孩子入队if(tmpNode.left!=null){que.offer(tmpNode.left);}if(tmpNode.right!=null){que.offer(tmpNode.right);}}resList.add(itemList);}}
}

借助队列实现

在这里插入图片描述

二、二叉树的层序遍历||(力扣107)

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
在这里插入图片描述
思路:
在(一)的基础上将最后的结果集翻转即可

class Solution {public List> resList = new ArrayList>();public List> levelOrderBottom(TreeNode root) {checkFun(root);return resList;}public void checkFun(TreeNode root){if(root == null){return ;}Queue que = new LinkedList<>();que.offer(root);while(!que.isEmpty()){int len =que.size();List itemList = new ArrayList<>();while(len-->0){TreeNode tmpNode = que.poll();if(tmpNode.left!=null){que.offer(tmpNode.left);}if(tmpNode.right!=null){que.offer(tmpNode.right);}itemList.add(tmpNode.val);}resList.add(itemList);}Collections.reverse(resList);}
}

在这里插入图片描述

三、二叉树的层平均值(力扣637)

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受
在这里插入图片描述
思路:
在每一层结束时,直接求取平均值即可

class Solution {public List averageOfLevels(TreeNode root) {List resList = new ArrayList<>();if(root==null){return resList;}Queue que = new LinkedList<>();que.offer(root);while(!que.isEmpty()){int len = que.size();int size = len ;double levelSum=0.0;while(size-->0){TreeNode tmpNode = que.poll();if(tmpNode.left!=null){que.offer(tmpNode.left);}if(tmpNode.right!=null){que.offer(tmpNode.right);}levelSum +=tmpNode.val;}resList.add(levelSum/len);}return resList;}
}

在这里插入图片描述

四、二叉树的锯齿形层序遍历(力扣103)

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
在这里插入图片描述

思路:
起初自认为 分为奇偶层 奇数层(根节点为第一层)右孩子先入队然后再左孩子,偶数层左孩子先入队然后再右孩子。这个思路很明显是错误的
在这里插入图片描述
换一种思路,按照最开始的层序遍历,将偶数层翻转即可。

class Solution {public List> zigzagLevelOrder(TreeNode root) {List> resList = new ArrayList<>();Queue que = new LinkedList<>();int level =0;if(root==null){return resList;}que.offer(root);while(!que.isEmpty()){List itemList = new ArrayList<>();int len = que.size();while(len-->0){TreeNode tmpNode = que.poll();if(tmpNode.left!=null){que.offer(tmpNode.left);}if(tmpNode.right!=null){que.offer(tmpNode.right);}itemList.add(tmpNode.val);}level++;if(level%2==0){Collections.reverse(itemList);resList.add(itemList);}else{resList.add(itemList);}}return resList;}
}

在这里插入图片描述

五、二叉树的右视图(力扣199)

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
在这里插入图片描述

思路:
正常的层序遍历 只不过当len==1时,记录当前结点的值

class Solution {public List rightSideView(TreeNode root) {List resList = new ArrayList<>();Queue que = new LinkedList<>();if(root==null){return resList;}que.offer(root);while(!que.isEmpty()){int len = que.size();while(len>0){TreeNode tmpNode = que.poll();if(tmpNode.left!=null){que.offer(tmpNode.left);}if(tmpNode.right!=null){que.offer(tmpNode.right);}if(len==1){resList.add(tmpNode.val);}len--;}}return resList;}
}

六、N叉树的层序遍历(力扣429)

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

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

在这里插入图片描述
思路:
和二叉树的层序遍历基本一致

class Solution {public List> levelOrder(Node root) {List> resList = new ArrayList<>();Queue que = new LinkedList<>();if(root==null){return resList;}que.offer(root);while(!que.isEmpty()){int len = que.size();List itemList = new ArrayList<>();while(len-->0){Node tmpNode = que.poll();for(int i=0;ique.offer(tmpNode.children.get(i));}itemList.add(tmpNode.val);}resList.add(itemList);}return resList;}
}

在这里插入图片描述


相关内容

热门资讯

长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
tag是什么意思 tab是什么... 一、B端基础控件的认识控件一词,直译的话可以翻译成 “用来控制的元件”,是我们对 B 端系统进行信息...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
tag是什么意思 tab是什么... 一、B端基础控件的认识控件一词,直译的话可以翻译成 “用来控制的元件”,是我们对 B 端系统进行信息...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...