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

有如下的一颗完全二叉树:

先序遍历结果应该为: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 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 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 完全二叉树的构建与四种遍历方法示例相关推荐

  1. java从1到9构建完全二叉树_Java完全二叉树的创建与四种遍历方法分析

    Java完全二叉树的创建与四种遍历方法分析 发布时间:2020-10-01 11:58:56 来源:脚本之家 阅读:87 作者:泡0沫 本文实例讲述了Java完全二叉树的创建与四种遍历方法.分享给大家 ...

  2. python下载文件到本地-Python下载网络文本数据到本地内存的四种实现方法示例

    本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法.分享给大家供大家参考,具体如下: import urllib.request import requests from io imp ...

  3. 二叉树的四种遍历方法(前序遍历、中序遍历、后序遍历、层序遍历)有图有真相!!!

    文章目录 二叉树的四种遍历方式 前序遍历(Preorder Traversal) 中序遍历(Inorder Traversal) 后序遍历(Postorder Traversal) 层序遍历(Leve ...

  4. 【树的四种遍历方法(遍历排序二叉树)】

    文章目录 一.建立一个排序二叉树 二.四种遍历 前言 这里先给出建立一颗普通的排序二叉树,平衡二叉树的建立以及操作,等复习到再写吧. 一.排序二叉树 排序二叉树,即当前节点左子树 < 当前节点 ...

  5. # 遍历结构体_关于二叉树怎样建立和四种遍历方法你知道吗?

    1. 首先我们要知道二叉树的性质是什么2. 怎样建立二叉搜索树?3. 先序遍历4. 中序遍历5. 后序遍历6. 总结上述三种遍历规律7. 层序遍历 1. 首先我们要知道二叉树的性质是什么 在二叉树上, ...

  6. HashMap的四种遍历方法,及效率比较(简单明了)

    public static void main(String[] args) {HashMap<Integer, String> map = new HashMap<Integer, ...

  7. java实现二叉树的构建以及3种遍历方法

    目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 package tree; import java.util.LinkedList; import java.util.Li ...

  8. 二叉树的四种遍历方法:前序、中序、后序、层次

    前/中/后序遍历也可分别称为前/中/后根遍历 #include <iostream> using namespace std;//二叉树的链式存储的结点 typedef struct Bi ...

  9. java构建二叉树_java实现二叉树的构建以及3种遍历方法

    packagetest;importjava.util.LinkedList;importjava.util.List;/*** 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 * * 参考 ...

最新文章

  1. python3安装pip3-Python3中安装pip3
  2. ensp支持哪个版本virtualbox_如何在 Fedora 中安装 VirtualBox
  3. C#如何用正则表达式截取https和带端口的域名
  4. 记录今天写的几个正则,数字范围的校验
  5. 如何监控 Elasticsearch 集群状态?
  6. tftp下载文件为中文名【原创】
  7. 第一序列任小粟的能力_末世废土文—《第一序列》:“这世间,已经不需要齐天大圣了。”...
  8. azure blob_在Azure中使用表,blob,队列和文件存储
  9. 简单的3个SQL视图搞定所有SqlServer数据库字典 (转载)
  10. mybatis将字段改为null_【MyBatis入门到入土精讲】MyBatis介绍
  11. Python暴力破解附近局域网WiFi密码
  12. 哔哩哔哩助手 for Mac说明书
  13. lookup-method方法理解
  14. 2022-2028全球多通道光纤旋转接头(FORJ)行业调研及趋势分析报告
  15. 如何保证GIS图件中字体大小是所要求的
  16. STM32学习(二)
  17. 11. Python3 测试代码
  18. 关于xpe和wes2009
  19. Doris Weekly FAQ】2021.07.19~2021.08.01
  20. 人才招聘网站设计代码(毕业设计和课程设计)

热门文章

  1. Hanlp的安装和配置
  2. 【剑指offer】面试题26:树的子结构(Java)
  3. php console postman,postman内置脚本说明
  4. python创建长度为n的数组_在Python中建立N维数组并赋初值
  5. python处理一亿条数据_Python基础数据处理库
  6. python matplotlib画图改变图标题和坐标轴标题的字体大小
  7. Python获得一篇文档的不重复词列表并创建词向量
  8. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码
  9. 简单的线性回归实现模型的存储和读取
  10. MySQL流浪记(三)—— Linux安装MySQL数据库5.7.30(亲测有效3分钟即可)