当前位置: 首页 > news >正文

数据结构——二叉树层序遍历

数据结构——二叉树层序遍历

    • 107. 二叉树的层序遍历 II
    • 199. 二叉树的右视图
      • 思路:
    • 637. 二叉树的层平均值

107. 二叉树的层序遍历 II

107. 二叉树的层序遍历 II

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

示例 1:
在这里插入图片描述

输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]

自底向上遍历,将原层序遍历的结果反转即可

class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> list = new ArrayList<>();Deque<TreeNode> que = new LinkedList<>();if (root == null) {return list;}que.offer(root);while (!que.isEmpty()) {List<Integer> itemList = new ArrayList<Integer>();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);len--;}list.add(itemList);}List<List<Integer>> result = new ArrayList<>();for (int i = list.size() - 1; i >= 0; i-- ) {result.add(list.get(i));}return result;}
}

199. 二叉树的右视图

199. 二叉树的右视图
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:
在这里插入图片描述
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

思路:

层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。

class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> list = new ArrayList<>();Deque<TreeNode> que = new LinkedList<>();if (root == null) {return list;}que.offerLast(root);while (!que.isEmpty()) {int levelSize = que.size();for (int i = 0; i < levelSize; i++) {TreeNode poll = que.pollFirst();if (poll.left != null) {que.addLast(poll.left);}if (poll.right != null) {que.addLast(poll.right);}if (i == levelSize - 1) {list.add(poll.val);}}}return list;}
}

637. 二叉树的层平均值

637. 二叉树的层平均值

给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
在这里插入图片描述
在这里插入图片描述
层序遍历的时候把一层求个总和在取一个均值。

class Solution {public List<Double> averageOfLevels(TreeNode root) {List<Double> list = new ArrayList<>();Deque<TreeNode> que = new LinkedList<>();if (root==null){return list;}que.offerLast(root);while(!que.isEmpty()){TreeNode peek = que.peekFirst();int levelSize = que.size();double levelSum = 0.0;// 统计每一层的和for (int i = 0; i < levelSize; i++) {TreeNode poll = que.pollFirst();levelSum += poll.val;if (poll.left != null) {que.addLast(poll.left);}if (poll.right != null) {que.addLast(poll.right);}}list.add(levelSum / levelSize);//均值放入结果list}return list;}
}
http://www.lryc.cn/news/64065.html

相关文章:

  • 【微机原理】8088/8086微处理器
  • springboot第12集:DAO功能代码
  • 基于KZG多项式承诺方案的RLN
  • 《站在巨人的肩膀上学习Java》
  • 敏捷ACP.敏捷估计与规划.Mike Cohn.
  • [创新工具和方法论]-01- DOE课程基础知识
  • LeetCode-1033. 移动石子直到连续
  • JVM调优入门指南:掌握步骤、参数和场景
  • 基于JSP+MySQL的跳蚤市场网站设计与开发
  • 内网穿透NPS和宝塔Nginx配合使用,开启SSL访问本地局域网网络
  • ToLua框架
  • Golang-常见数据结构Map
  • 基于空间矢量脉宽调制(SVPWM)的并网逆变器研究(Simulink)
  • 介绍tcpdump在centos中的使用方法
  • 机器学习实战:Python基于DT决策树模型进行分类预测(六)
  • 操作系统之进程同异步、互斥
  • 你了解这2类神经性皮炎吗?常常预示着这5类疾病!
  • 二叉搜索树【Java】
  • 二叉树的遍历方式
  • SpringCloud01
  • SpringBoot整合Redis实现点赞、收藏功能
  • 【Java入门合集】第一章Java概述
  • Android无线调试操作说明
  • 什么是 Python ?聊一聊Python程序员找工作的六大技巧
  • RabbitMQ 01 概述
  • 面经|曹操出行供需策略运营
  • 【Python】selenium工具
  • 实验六~Web事件处理与过滤器
  • 刷题4.28
  • 做了一年csgo搬砖项目,还清所有债务:会赚钱的人都在做这件事 !