本来就是基础知识,不能丢的太干净,今天竟然花了那么长的时间才写出来,记一下。

有如下的一颗完全二叉树:
先序遍历结果应该为:1 2 4 5 3 6 7
中序遍历结果应该为:4 2 5 1 6 3 7
后序遍历结果应该为:4 5 2 6 7 3 1
层序遍历结果应该为:1 2 3 4 5 6 7
二叉树的先序遍历、中序遍历、后序遍历其实都是一样的,都是执行递归操作。
我这记录一下层次遍历吧:层次遍历需要用到队列,先入队在出队,每次出队的元素检查是其是否有左右孩子,有则将其加入队列,由于利用队列的先进先出原理,进行层次遍历。
下面记录下完整代码(Java实现),包括几种遍历方法:
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
/**
* 定义二叉树节点元素
* @author bubble
*
*/
class Node {
public Node leftchild;
public Node rightchild;
public int data;
public Node(int data) {
this.data = data;
}
}
public class TestBinTree {
/**
* 将一个arry数组构建成一个完全二叉树
* @param arr 需要构建的数组
* @return 二叉树的根节点
*/
public Node initBinTree(int[] arr) {
if(arr.length == 1) {
return new Node(arr[0]);
}
List<Node> nodeList = new ArrayList<>();
for(int i = 0; i < arr.length; i++) {
nodeList.add(new Node(arr[i]));
}
int temp = 0;
while(temp <= (arr.length - 2) / 2) { //注意这里,数组的下标是从零开始的
if(2 * temp + 1 < arr.length) {
nodeList.get(temp).leftchild = nodeList.get(2 * temp + 1);
}
if(2 * temp + 2 < arr.length) {
nodeList.get(temp).rightchild = nodeList.get(2 * temp + 2);
}
temp++;
}
return nodeList.get(0);
}
/**
* 层序遍历二叉树,,并分层打印
* @param root 二叉树根节点
*
*/
public void trivalBinTree(Node root) {
Queue<Node> nodeQueue = new ArrayDeque<>();
nodeQueue.add(root);
Node temp = null;
int currentLevel = 1; //记录当前层需要打印的节点的数量
int nextLevel = 0;//记录下一层需要打印的节点的数量
while ((temp = nodeQueue.poll()) != null) {
if (temp.leftchild != null) {
nodeQueue.add(temp.leftchild);
nextLevel++;
}
if (temp.rightchild != null) {
nodeQueue.add(temp.rightchild);
nextLevel++;
}
System.out.print(temp.data + " ");
currentLevel--;
if(currentLevel == 0) {
System.out.println();
currentLevel = nextLevel;
nextLevel = 0;
}
}
}
/**
* 先序遍历
* @param root 二叉树根节点
*/
public void preTrival(Node root) {
if(root == null) {
return;
}
System.out.print(root.data + " ");
preTrival(root.leftchild);
preTrival(root.rightchild);
}
/**
* 中序遍历
* @param root 二叉树根节点
*/
public void midTrival(Node root) {
if(root == null) {
return;
}
midTrival(root.leftchild);
System.out.print(root.data + " ");
midTrival(root.rightchild);
}
/**
* 后序遍历
* @param root 二叉树根节点
*/
public void afterTrival(Node root) {
if(root == null) {
return;
}
afterTrival(root.leftchild);
afterTrival(root.rightchild);
System.out.print(root.data + " ");
}
public static void main(String[] args) {
TestBinTree btree = new TestBinTree();
int[] arr = new int[] {1,2,3,4,5,6,7};
Node root = btree.initBinTree(arr);
System.out.println("层序遍历(分层打印):");
btree.trivalBinTree(root);
System.out.println("\n先序遍历:");
btree.preTrival(root);
System.out.println("\n中序遍历:");
btree.midTrival(root);
System.out.println("\n后序遍历:");
btree.afterTrival(root);
}
}
遍历结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# 构建完全二叉树
# 二叉树的遍历
# java实现完全二叉树遍历
# Java二叉搜索树基础原理与实现方法详解
# java实现 二叉搜索树功能
# Java创建二叉搜索树
# 实现搜索
# 插入
# 删除的操作实例
# Java 实现二叉搜索树的查找、插入、删除、遍历
# 图解红黑树及Java进行红黑二叉树遍历的方法
# 图解二叉树的三种遍历方式及java实现代码
# java实现二叉树的创建及5种遍历方法(总结)
# Java实现二叉树的深度优先遍历和广度优先遍历算法示例
# Java实现的二叉树常用操作【前序建树
# 前中后递归非递归遍历及层序遍历】
# Java的二叉树排序以及遍历文件展示文本格式的文件树
# Java中二叉树的建立和各种遍历实例代码
# java实现按层遍历二叉树
# Java二叉搜索树遍历操作详解【前序、中序、后序、层次、广度优先遍历】
# 遍历
# 二叉树
# 递归
# 都是
# 我这
# 一颗
# 花了
# 几种
# 本来就是
# 大家多多
# 则将
# 从零开始
# 下一层
# 是一样的
# import
# util
# brush
# class
# author
相关文章:
大连网站设计制作招聘信息,大连投诉网站有哪些?
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何在Ubuntu系统下快速搭建WordPress个人网站?
中山网站制作网页,中山新生登记系统登记流程?
建站之星安装失败:服务器环境不兼容?
建站主机SSH密钥生成步骤及常见问题解答?
建站之星安装后如何自定义网站颜色与字体?
建站主机选购指南与交易推荐:核心配置解析
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
建站主机选购指南:核心配置优化与品牌推荐方案
如何在七牛云存储上搭建网站并设置自定义域名?
黑客入侵网站服务器的常见手法有哪些?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
如何在建站主机中优化服务器配置?
网站制作新手教程,新手建设一个网站需要注意些什么?
如何选择适配移动端的WAP自助建站平台?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何选择高性价比服务器搭建个人网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
常州自助建站费用包含哪些项目?
如何正确下载安装西数主机建站助手?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
建站之星安装后如何配置SEO及设计样式?
音乐网站服务器如何优化API响应速度?
微信小程序 input输入框控件详解及实例(多种示例)
Android滚轮选择时间控件使用详解
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
如何确保西部建站助手FTP传输的安全性?
建站上传速度慢?如何优化加速网站加载效率?
如何在阿里云购买域名并搭建网站?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何破解联通资金短缺导致的基站建设难题?
免费网站制作appp,免费制作app哪个平台好?
网站制作服务平台,有什么网站可以发布本地服务信息?
已有域名和空间如何快速搭建网站?
北京的网站制作公司有哪些,哪个视频网站最好?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
网站制作报价单模板图片,小松挖机官方网站报价?
建站之星2.7模板快速切换与批量管理功能操作指南
如何在自有机房高效搭建专业网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何快速生成专业多端适配建站电话?
建站之星展会模版如何一键下载生成?
如何在服务器上三步完成建站并提升流量?
深圳网站制作案例,网页的相关名词有哪些?
如何高效搭建专业期货交易平台网站?
C++中引用和指针有什么区别?(代码说明)
*请认真填写需求信息,我们会在24小时内与您取得联系。