打印完全二叉树java_java 完全二叉树的构建与四种遍历方法示例

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

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

c72dbb1c6ef3ef13e2a12e6ec49ab597.png

先序遍历结果应该为: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);

}

}

遍历结果:

1a09315819877f62bf64da381b81ae3d.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模拟 http connecttimeout_燃烧室数学模型模拟软件NPSS

燃烧室的各个结构都可以被建立数学模型用矩阵进行模拟计算&#xff0c;每个模型都由输入、定义各部件的参数以及输出组成。流体在系统中某个点的状态可以由速率、压力、温度和构成(例如铝粉和氢气的质量比例)等参数描述。由于各个参数之间存在反馈环路&#xff0c;导致输入和输…

两个时间点距离 time_t c_天津二建公路考试时间

天津二建公路考试时间 Vadg42d天津二建公路考试时间 预警体系通过预警分析和预控对策实现事故的预警和控制&#xff0c;预警分析完成监测、识别、诊断与评价功能&#xff0c;而预控对策完成对事故征兆的不良趋势进行纠错和治错的功能。技术方案现金流量表主要有投资现金流量表&…

java 168转换成861_java实验-java语言面向对象编程基础

java实验-java语言面向对象编程基础 (12页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;8.90 积分广州大学学生实验报告广州大学学生实验报告开课学院及实验室&#xff1a;开课学院及实验室&#xf…

c#养老院老人信息管理系统源码 论文_辽宁吃的好的社区养老院位置,爱心养老院_抚顺市望花区社会养老中心...

首页 > 新闻中心发布时间&#xff1a;2020-11-09 02:11:16 导读&#xff1a;抚顺市望花区社会养老中心为您提供辽宁吃的好的社区养老院位置,爱心养老院的相关知识与详情&#xff1a; 老人早晨气场后手指经常发硬&#xff0c;无法自己握拳。 老人关节活动不方便&#xff0c;活…

SQL进阶:子查询

一般情况下,我们都是直接对表进行查询,但有时候,想要的数据可能通过一次select 获取不到,需要嵌套select,这样就形成了子查询。 子查询可以位于查询语句的任意位置,主要的注意点在于用于不同的位置,和不同的关键字一起使用时,需要注意返回的列的数量和行的数量。 位于…

android四周阴影效果_帮助独立开发者轻松创建令人惊叹的产品视觉效果

大家好&#xff0c;我是独立开发者Larry&#xff5e;作品发布、宣传交流过程中对作品进行样机包装或场景展示往往是不可或缺的&#xff0c;除了纯手工打造外&#xff0c;通常大家都会运用一些样机素材来完成对产品的快速包装&#xff0c;因此关于样机素材的资源网上有很多&…

pythonweb全栈开发_Web全栈开发穿插路程(python+js)

简介&#xff1a;穿插路程&#xff0c;是指快去快回&#xff0c;来去一阵风&#xff0c;走的快&#xff0c;走马观花&#xff0c;没有细品。细品那就要慢慢熬功夫喽。1.完成后的效果是&#xff1a;用户访问入口页面&#xff0c;录入信息&#xff0c;提交后结果以逐步添加的形式…

C++和Rust_Kotlin、Rust两个充满了骚操作的编程语言,值得一玩

Kotlin和Rust都是两个年轻的编程语言&#xff0c;而且相比现在流行的Python、JavaScript/Typescript语言来说&#xff0c;Kotlin和Rust更接近底层&#xff0c;对于学习理解计算机原理&#xff0c;学习Kotlin和Rust应该是更好的选择。与C/C相比&#xff0c;Kotlin、Rust做上层应…

理发店管理系统java_美容美发店管理系统的设计与实现(JSP,SQLServer)(含录像)

美容美发店管理系统的设计与实现(,SQLServer)(含录像)(开题报告,论文12700字,程序代码,SQLServer数据库)系统功能结构本系统是根据我国美容业的现状及中小型美容院的发展需要进行详细的分析&#xff0c; 对美容院信息管理系统进行合理的设计&#xff0c; 实现集成员工管理、工资…

cpu频率_新版win10修复CPU频率显示不正确的bug

在此前win10 2020年5月更新后&#xff0c;有用户反馈win10任务管理器无法正确显示CPU使用率和频率&#xff0c;比如会出现CPU频率为0.00GHz。现在有外媒报道&#xff0c;微软在win10测试版19042.608中修复了CPU频率显示不正确的bug。这一消息也得到了微软的确认表示已经修复了某…

sap fiori导出列表到excel_介绍一种Fiori标准应用的增强方式

2015年&#xff0c;Jerry还在SAP成都研究院CRM Fiori开发团队工作时&#xff0c;担任了德国一个著名的灯具制造商客户的CRM Fiori项目的dev angel. 当时客户提出了若干对CRM Fiori标准应用的增强需求&#xff0c;总的来说分为前台Fiori UI界面的增强(比如增添新的自定义字段)以…

电脑ip地址设置_路由器动态IP和静态IP上网方式怎么设置【设置教程】

在我们设置路由器的过程中&#xff0c;路由器设置界面一般会给我们提供4种上网方式选项&#xff0c;分别是&#xff1a;“让路由器自动选择上网方式(推荐)”、“PPPoE(ADSL虚拟拨号)”、“动态IP(以太网宽带&#xff0c;自动从服务商获取IP地址)”、“静态IP(以太网宽带&#x…

钉钉关键字回复功能_在家办公首日:钉钉、企业微信集体“崩溃”,只能选择 QQ、微信...

今日是春节假期结束后的第一个工作日&#xff0c;不少企业规定2月3-7日可以在家远程办公。不过尴尬的是&#xff0c;今日上午&#xff0c;钉钉、企业微信等在线办公App集体出现问题。不少网友反馈钉钉出现Bug&#xff0c;“不知道大家工作的怎么样&#xff0c;我的钉钉刚才一直…

python决策树 value_机器学习 | 算法笔记(四)- 决策树算法以及代码实现

概述上一篇讲述了《机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现》&#xff0c;本篇讲述机器学习算法决策树&#xff0c;内容包括模型介绍及代码实现。决策树决策树(Decision Tree)在机器学习中也是比较常见的一种算法&#xff0c;属于监督学习中的一种。看字面意思应…

监听手指是否离开屏幕android_Flutter事件监听

一. 事件监听 在大前端的开发中&#xff0c;必然存在各种各样和用户交互的情况&#xff1a;比如手指点击、手指滑动、双击、长按等等。所有内容首发于公众号&#xff1a;coderwhy在Flutter中&#xff0c;手势有两个不同的层次&#xff1a;第一层&#xff1a;原始指针事件&#…

@excel注解_Excel导入导出Java解决方案推荐

今天锋哥介绍一款Excel导入导出Java解决方案Easy-POI&#xff0c;以前我们用POI&#xff0c;麻烦点&#xff0c;Easy-POI是封装好的&#xff0c;用起来Easy点&#xff0c;封装过&#xff0c;性能好&#xff0c;所以大伙有空可以研究下&#xff1b;Easy-POIEasy-POI是一款Excel导…

wind 下装mysql,windows 下安装MySQL

下载压缩包首先到官网下载安装包,可联系提供配置环境变量找到系统属性(windows10在高级系统设置)在这里插入图片描述找到系统变量的 Path 点击编辑在这里插入图片描述点击新建&#xff0c;然后添加进去自己压缩包位置的bin目录在这里插入图片描述之后点击三个确当 (同时自动关闭…

打开word2007总是出现配置进度_实战经验:Word 2007每次打开都弹出正在配置

在一次清理注册表之后&#xff0c;发现每次打开Word 2007时&#xff0c;都会弹出”正在配置”的对话框。经过实验&#xff0c;发现可以使用如下的方法解决此问题&#xff1a;1) 打开cmd命令行2) 对于Word 2007&#xff0c;执行如下的指令&#xff1a;reg add HKCUSoftwareMicro…

chrome github上不去 mac_码农大叔打赌,github上快速搜索优质开源项目,这些技能你不懂?...

GitHub的流行&#xff0c; GitHub在开源世界的受欢迎程度自不必多言。再加上今天&#xff0c;GitHub官方又搞了个大新闻&#xff1a;私有仓库也改为免费使用&#xff0c;这在原来可是需要真金白银的买的。可见微软收购后&#xff0c;依然没有改变 GitHub 的定位&#xff0c;甚至…

matlab保存数据到excel_Excel意外退出数据未保存?这个方法可以帮你找回所有数据...

老师们每天都需要完成大量的教学工作&#xff0c;且他们的每一个工作都是跟文字或数据打交道&#xff0c;Excel也逐渐成为了大家日常办公中的必备软件。在利用Excel办公时&#xff0c;通常是这么一个操作流程——新建、编辑、保存。编辑的时间可能是几分钟&#xff0c;也可能是…