从上到下打印二叉树 III(中等难度)

简介: 从上到下打印二叉树 III(中等难度)

目录

题目概述(中等难度)

思路与代码

思路展现

方法1 层序遍历 + 双端队列

代码示例

方法2 层序遍历 + 倒序

代码示例

题目概述(中等难度)



题目链接:

点我进入链接


思路与代码

思路展现

方法1 层序遍历 + 双端队列

这块直接看K神题解就好,链接放到这里了:

戳我戳我

个人认为双端队列是需要掌握的,而且有了前面两道题目的铺垫,建议这道题目直接看代码就能理解K神的意思了.


代码示例

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> res = new ArrayList<>();
        if(root != null){
           queue.add(root);
        }
        while(!queue.isEmpty()) {
            //定义一个双端队列
            LinkedList<Integer> list = new LinkedList<>();
            //注意这块的循环必须这样写
            for(int i = queue.size(); i > 0; i--) {
                TreeNode node = queue.poll();
                if(res.size() % 2 == 0) {
                    //偶数层,使用addLast方法放到队列头部
                    list.addLast(node.val);
                }else {
                    //奇数层,使用addFirst方法放到队列尾部
                    list.addFirst(node.val);
                }
                if(node.left != null) {
                   queue.add(node.left);
                }
                if(node.right != null) {
                   queue.add(node.right);
                }             
            }
        res.add(list);
        }
    return res;
    }
}

2.png


方法2 层序遍历 + 倒序

这个方法跟我当时自己想的一样,奈何我根本不知道集合中的元素竟然还有反转方法,的确是骚.使用Collections.reverse()方法即可。

代码示例

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> res = new ArrayList<>();
        if(root != null){
           queue.add(root);
        }
        while(!queue.isEmpty()) {
            List<Integer> list = new ArrayList<>();
            //注意这块的循环必须这样写
            for(int i = queue.size(); i > 0; i--) {
                TreeNode node = queue.poll();
                list.add(node.val);
                if(node.left != null) {
                   queue.add(node.left);
                }
                if(node.right != null) {
                   queue.add(node.right);
                }             
            }
            if(res.size() % 2 == 1) {
                //奇数层直接使用reverse方法反转
                Collections.reverse(list);
            }
            res.add(list);
        }
    return res;
    }
}


2.png


相关文章
|
存储 算法 关系型数据库
Ceph介绍及原理架构分享
Ceph介绍及原理架构分享
645 0
|
运维 Kubernetes Linux
【Kubernetes】 Dashboard 控制台web部署应用
相比kubectl命令和yaml文件配置部署,图形化部署更简单,但是作为k8s运维,还是需要掌握yaml编写配置
1054 0
【Kubernetes】 Dashboard 控制台web部署应用
|
存储 关系型数据库 PostgreSQL
深入浅出PostgreSQL B-Tree索引结构
PostgreSQL 的B-Tree索引页分为几种类别 meta page root page # btpo_flags=2 branch page # btpo_flags=0 leaf page # btpo_flags=1 如果即
14746 0
Mac 下终端命令无法使用的问题
Mac 下终端命令无法使用的问题
381 1
|
机器学习/深度学习 存储 自然语言处理
利用Elasticsearch进行大规模文本分类与聚类
【8月更文第28天】文本数据在现代应用中占据着重要的位置,无论是社交媒体分析、客户反馈管理还是内容推荐系统。Elasticsearch 是一款强大的搜索引擎,非常适合用于处理大量的文本数据。本文将介绍如何利用 Elasticsearch 来实现大规模文本数据的分类与聚类分析,并提供一些具体的代码示例。
522 0
|
存储 缓存 分布式计算
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
625 1
|
JSON 监控 安全
在Linux中,如何使用Suricata进行实时网络威胁检测?
在Linux中,如何使用Suricata进行实时网络威胁检测?
|
NoSQL MongoDB 数据库
深入探究MongoDB的ObjectId:唯一性、顺序性与应用指南
深入探究MongoDB的ObjectId:唯一性、顺序性与应用指南
887 0
|
存储 开发工具 数据库
认识HIS系统 HIS系统的主要功能解释说明
HIS系统即医院信息系统(全称为Hospital information System) ,是指利用计算机软硬件技术和网络通信技术等现代化手段,对医院及其所属各部门的人流、物流、财流进行综合管理,对在医疗活动各阶段产生的数据进行采集、存储、处理、提取、传输、汇总,加工形成各种信息,从而为医院的整体运行提供全面的自动化管理及各种服务的信息系统。
895 5