题目描述

分层遍历二叉树
用java实现树结构,分层遍历二叉树。给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层单独输出一行),每一层要求访问的顺序为从左到右,再按照相同规则从下至上遍历一遍,树节点定义如下
class Node {
int data;
Node left;
Node right;
}
输入描述
图:__1__/     \__2__     3__/     \       \4     __5__     67     8
上面的输入为:1, 2, 3, 4, 5, 0, 6, 0, 0, 7, 8注:0代表这个位置没有数字,数据长度不超过1024。
输出描述
按照层级正向和反向输出二叉树,注意输出行末没有空格
示例1
输入
1, 2, 3, 4, 5, 0, 6, 0, 0, 7, 8
输出
1
2 3
4 5 6
7 87 8
4 5 6
2 3
1

代码

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;
class Node{int val;Node left;Node right;public Node(int val){this.val = val;}
}
public class A1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] str = sc.nextLine().split(",");int len = str.length;int[] data = new int[len];for(int i=0; i<len; i++){data[i] = Integer.valueOf(str[i]);}Node root = creat(data);List<List<Integer>> result = levelorder(root);for (int i = 0; i < result.size(); i++) {for (int j = 0; j < result.get(i).size(); j++) {System.out.print(result.get(i).get(j) + " ");}System.out.println();}System.out.println();for (int i = result.size()-1; i >= 0; i--) {for (int j = 0; j < result.get(i).size(); j++) {System.out.print(result.get(i).get(j) + " ");}System.out.println();}}public static Node creat(int[] objs){ArrayList<Node> datas =new ArrayList<Node>();//        将一个数组的值依次转换为Node节点for(int o:objs){datas.add(new Node(o));}//第一个数为根节点Node root=datas.get(0);//建立二叉树for (int i = 0; i <objs.length/2; i++) {//左孩子if(datas.get(i*2+1).val!=0){datas.get(i).left=datas.get(i*2+1);}//右孩子if((i*2+2)<datas.size() && datas.get(i*2+2).val!=0){//避免偶数的时候 下标越界datas.get(i).right=datas.get(i*2+2);}}return root;}public static List<List<Integer>> levelorder(Node Node) {Queue<Node> queue = new LinkedList<>();List<List<Integer>> result = new ArrayList<>();     if(Node == null) return result;queue.offer(Node); // 首先将根节点root入队while (!queue.isEmpty()) {// Queue不为空则循环List<Integer> node = new ArrayList<>();// 保存每一层节点的值int length = queue.size();// 每一层的节点数目while (length > 0) {Node tree = queue.poll();if (tree.left != null) {queue.offer(tree.left);}if (tree.right != null) {queue.offer(tree.right);}node.add(tree.val);length--;}// 循环结束后,得到的Queue为下一层做准备,node为本层遍历结果
            result.add(node);}return result;}
}

转载于:https://www.cnblogs.com/haimishasha/p/11370583.html

网易:层次遍历二叉树相关推荐

  1. 层次遍历二叉树(编程之美3.10)

    问题(假定根节点位于第0层) 1. 层次遍历二叉树(每层换行分开) 2. 层次遍历二叉树指定的某层 例如 上图中 1. 1 2 3 4 5 6 7 8 2. 第三层 7 8 可以看出得出第二问的解,第 ...

  2. 按层次遍历二叉树_LeetCode | 102.二叉树的层次遍历

    这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 上面的题就是 二叉树的层次遍历 题目的截图,同时 LeetCode ...

  3. 按层次遍历二叉树算法

    问题:按层次遍历二叉树 在网上看了一些按层次遍历二叉树的算法,这里修改了一下通过队列来按层次遍历二叉树的算法 --------------------------------------------- ...

  4. 如何层次遍历二叉树(使用队列作为辅助工具)

    在此之前,我们已经掌握了使用递归算法实现二叉树先序遍历.中序遍历和后序遍历的流程,这里我们加大一下难度,探讨该如何实现二叉树的层次遍历算法. 相信有朋友至此会直接回答"用递归算法解决&quo ...

  5. c语言实现层次遍历二叉树完整代码

    //混用了一下c和c++(仅输入输出混用了一下,其他没有)#include<stdio.h> #include<stdlib.h> #include<iostream&g ...

  6. 二叉树层序遍历 c语言,C语言按层次遍历二叉树算法

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. #define MaxSize 1000 typedef char ElemType; t ...

  7. PTA - 按层次遍历二叉树

    按层次遍历二叉树 题目:以字符串的形式定义一棵二叉树的先序序列,若字符是'#', 表示该二叉树是空树,否则该字符是相应结点的数据元素.读入相应先序序列,建立二叉树,然后按层次遍历该二叉树并输出结点数据 ...

  8. java层次遍历建立二叉树_java层次遍历二叉树

    思路很简单.通过队列,先将头结点放入队列,再遍历每个节点的左节点和右节点. import java.util.ArrayList; import java.util.LinkedList; /** * ...

  9. c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历

    这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 102.二叉树的层次遍历题目 上面的题就是 二叉树的层次遍历 题目 ...

最新文章

  1. NFS---linux远程挂载
  2. c语言中的常用函数的使用,C语言的常用库函数使用方法分析及用途
  3. OpenInfra 基金会积极推动开源项目在中国市场的发展与应用
  4. 7.边缘检测:2D运算——回顾、高斯滤波器2D的导数、Sigma对导数的影响_1
  5. java 蓝桥杯 算法训练 区间k大数查询(题解)
  6. opencv-api getStructuringElement
  7. 簡單設定 kernel 選項在使用 iptables 前
  8. python 爬虫_python爬虫技术汇总
  9. 企业网管服务器架设资料(极品中的极品)
  10. ASP.NET Razor - html中使用if else
  11. 汇川PLC编程软件AutoShop的应用
  12. tar 打包隐藏文件
  13. ActiveMQ专题2 —— ActiveMQ下载和安装(Linux版)
  14. 各种门锁的内部结构图_有没有这种执手门锁的内部结构图?
  15. Eddy‘s picture
  16. 游戏玩到这种程度,酱紫真的好吗?
  17. Ruby_01_环境安装
  18. 《succes can be a lonely road》 【istrangeboy精品英文励志短文系列】之最美英文励志诗《成功是一条孤独之路》英译汉
  19. oracle查询timestamp范围,Oracle TIMESTAMP数据类型
  20. android 实现视频播放功能,android开发之简单视频播放器(VideoView)

热门文章

  1. (一)通过深度学习进行COVID-19诊断
  2. 使用Upida/Jeneva.Net验证传入的JSON
  3. ASP.NET Core 2.0身份和角色管理入门
  4. 关于.NET的单元测试
  5. vue用html做报表,Vue配置生成无限分割的表格,可快速实现任意复杂报表
  6. 心态很容易受别人影响_为什么你情绪容易受别人影响,是因为不懂得这个道理...
  7. eureka常见错误
  8. php 标签库,PHP.MVC的模板标签系统之模板标签库
  9. 计算机生物模拟试题,2017年高考理综生物部分模拟试题
  10. HTML怎么实现抽奖变色,html+css+js实现简单抽奖