java分层打印二叉树_基于Java的二叉树层序遍历打印实现

java分层打印二叉树_基于Java的二叉树层序遍历打印实现层序遍历的思路:若树为空,则返回空,否则从树的第一层开始,即从根节点,从上而下逐层遍历。1.二叉树层序遍历Ⅰ——剑指offer32-Ⅰ从上到下,从左到右打印二叉树,返回一维数组int[]res。classSolution{publicint[]levelOrder(TreeNoderoot){if(root==null)returnnewint[0];Queueq=…

大家好,又见面了,我是你们的朋友全栈君。

层序遍历的思路:若树为空,则返回空,否则从树的第一层开始,即从根节点,从上而下逐层遍历。

1. 二叉树层序遍历Ⅰ——剑指offer32-Ⅰ

从上到下,从左到右打印二叉树,返回一维数组int[] res。

class Solution {

public int[] levelOrder(TreeNode root) {

if (root == null) return new int[0];

Queue q = new LinkedList<>();

q.add(root);

List list = new ArrayList<>();

while (!q.isEmpty()) {

TreeNode node = q.poll();

list.add(node.val);

if (node.left != null) q.add(node.left);

if (node.right != null) q.add(node.right);

}

int[] res = new int[list.size()];

for (int i = 0; i < res.length; i++)

res[i] = list.get(i);

return res;

}

}

2. 二叉树层序遍历Ⅱ——剑指offer32-Ⅱ/LeetCode102

从上到下,从左到右打印二叉树,返回List> res。

class Solution {

public List> levelOrder(TreeNode root) {

List> res = new ArrayList<>();

Queue q = new LinkedList<>();

if (root != null) q.add(root);

while (!q.isEmpty()) {

List list = new ArrayList<>();

for (int i = q.size(); i > 0; i–) {

TreeNode node = q.poll();

list.add(node.val);

if (node.left != null) q.add(node.left);

if (node.right != null) q.add(node.right);

}

res.add(list);

}

return res;

}

}

3. 二叉树层序遍历Ⅲ——剑指offer32-Ⅲ/LeetCode103

从上到下,按zigzag方式打印(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行),返回List> res。

class Solution {

public List> zigzagLevelOrder(TreeNode root) {

List> res = new ArrayList<>();

Queue q = new LinkedList<>();

if (root != null) q.add(root);

while (!q.isEmpty()) {

LinkedList list = new LinkedList<>();

for (int i = q.size(); i > 0; i–) {

TreeNode node = q.poll();

if (res.size() % 2 == 0) list.addLast(node.val);

else list.addFirst(node.val);

if (node.left != null) q.add(node.left);

if (node.right != null) q.add(node.right);

}

res.add(list);

}

return res;

}

}

4. 二叉树层序遍历Ⅳ——LeetCode107

从下到上,从左到右打印二叉树,返回List> res。

class Solution {

public List> levelOrderBottom(TreeNode root) {

List> res = new ArrayList<>();

Queue q = new LinkedList<>();

if (root != null) q.add(root);

while (!q.isEmpty()) {

List list = new ArrayList<>();

for (int i = q.size(); i > 0; i–) {

TreeNode node = q.poll();

list.add(node.val);

if (node.left != null) q.add(node.left);

if (node.right != null) q.add(node.right);

}

// 头插法

res.add(0, list);

}

return res;

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143545.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java 数组和List的使用「建议收藏」

    Java 数组和List的使用「建议收藏」Java中数据的保存离不开数组,但数组的长度是不可变的。这时候就需要列表类(List)来进行数组扩容等操作,同时列表还可以包含批量删除、修改等更方便的内容。同时ArrayList作为使用相当频繁的List类,它的扩容算法效率很高,本文通过其源代码来分析其扩容高效的原因。

    2022年8月23日
    5
  • 12.Java- Maven 教程

    12.Java- Maven 教程一、安装引用菜鸟教程:Maven菜鸟教程地址1.下载1.Maven链接Maven下载地址:,点击跳转2.选择版本3.解压到指定地址4.并配置环境变量,引用的菜鸟教程引用菜鸟教程,菜鸟教程路径地址,点击跳转右键“计算机”,选择“属性”,之后点击“高级系统设置”,点击”环境变量”,来设置环境变量,有以下系统变量需要配置:新建系统变量MAVEN_HOME,变量值:E:\Maven\apache-maven-3.3.9编辑系统变量Path,添加变量值:;%M

    2022年9月8日
    2
  • java ftl_.ftl文件 是什么文件 freemaker「建议收藏」

    java ftl_.ftl文件 是什么文件 freemaker「建议收藏」freemarker的文件一般以后缀ftl,ftl文件的头上要写这样才能在ftl中使用webwork的tag。freemarker确实是不错的模版语言引擎,尤其是处理对象图很方便,处理xml也很方便,还支持xpath什么是FreeMarker?FreeMarker是一个模版引擎,一个基于文本的模板输出工具(生成任意的HTML表单代码)。它是一个Javapackage,面向Java程序员的cla…

    2022年6月26日
    42
  • android 浏览器 开发,Android 浏览器的开发实例分享

    android 浏览器 开发,Android 浏览器的开发实例分享本文主要讲解Android浏览器的开发实例,有三部分内容:启动Android默认浏览器、指定浏览器进行访问以及打开本地的html文件。一、启动Android默认浏览器Java代码Intentintent=newIntent();intent.setAction(“android.intent.action.VIEW”);Uricontent_url=Uri.parse(“http:/…

    2022年5月15日
    50
  • 常见的IT自动化运维工具有哪些?推荐一款好用的?「建议收藏」

    自动化运维是IT运维工作的升华,其不单纯是一个维护过程,更是一个管理的提升过程,是IT运维的最高层次,也是未来的发展趋势。所以作为IT运维人员,一定要知道常见的IT自动化运维工具有哪些?哪款比较好用?常见的IT自动化运维工具有哪些?1、Puppet2、SaltStack3、Ansible4、PSSH5、阿里云OOS6、行云管家【重点推荐】一款好用的自动化运维工具-行云管家!1、自动化运维之预设脚本库脚本是实现自动化运维的基础,运维人员经常通过脚本来替代以往一些需要手工操作的业务,提升工作

    2022年4月14日
    163
  • VS2008 WEB组件安装失败——解决办法[通俗易懂]

    VS2008 WEB组件安装失败——解决办法[通俗易懂]    最近在安装SqlServer2008R2时意外失败,错误从来没见过,原因无从查起。于是卸载了VisualStudio2008,然后把数据库和VS2008都重新装一遍,谁知道VS2008安装时竟然失败了,提示“WEB组件安装失败”。在网上查了下原因,很多人说的都是废话,结合部分有用的意见,我尝试了如下解决办法:  1、根据提示,是第一个组件“VisualStudioWeb…

    2025年8月26日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号