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;}
}

在这里插入图片描述


相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...