请使用java来构造和遍历二叉树?
【分析】
二叉树的结构:根节点、左子树、右子树。其中左子树的值必须小于根节点,右子树的值必须大于根节点。构造这种树结构,就是创建一个类,并提供一个方法,当给定一个值时,它能够自动创建节点并自动挂到二叉树的合适位置。
二叉树的遍历:分为先序遍历、中序遍历和后序遍历。先序遍历:根、左、右。
中需遍历:左、根、右。
后续遍历:左、右、根。
二叉树的应用:加密解密、文件压缩、快速查询、快速遍历等。
1、构造二叉树的节点对象,并提供插入方法。
private int data; //存放节点数据
private BinaryTree left; //左子树
private BinaryTree right; //右子树 /**
* 构造方法,创建新节点
*/
public BinaryTree(int data) {
this.data = data;
this.left = null;
this.right = null;
} /**
* 插入新节点
*/
public void insert(BinaryTree root, int data){
if(root !=null){
if(data <root.data){
if(root.left ==null){ //左子树空位,插入
root.left = new BinaryTree(data);
}else{ //左子树非空,将左子树作为根节点递归
insert(root.left, data);
}
}else{
if(root.right ==null){
root.right = new BinaryTree(data);
}else{
insert(root.right, data);
}
}
}
}
2.插入节点构造出二叉树,并通过先序遍历、中序遍历、后序遍历对二叉树进行遍历
public static void main(String[] args) {
BinaryTree root = new BinaryTree(6); //创建根节点
int[] a = {2,1,4,5,3,8,6,7,9};
for (int i = 0; i < a.length; i++) { //插入节点
root.insert(root, a[i]);
} preTraversal( root);
midTraversal( root);
sufTraversal( root);
}
//先序遍历
public static void preTraversal(BinaryTree root){
if (root !=null) {
System.out.print(root.getData() +"-");
preTraversal(root.getLeft());
preTraversal(root.getRight());
} } //中序遍历
public static void midTraversal(BinaryTree root){
if(root !=null){
midTraversal(root.getLeft());
System.out.print(root.getData()+"-");
midTraversal(root.getRight());
}
} //后序遍历
public static void sufTraversal(BinaryTree root){
if(root !=null){
sufTraversal(root.getLeft());
sufTraversal(root.getRight());
System.out.print(root.getData()+"-");
}
}
请使用java来构造和遍历二叉树?的更多相关文章
- Java 层序创建和遍历二叉树
直接上代码 package te.com; import java.util.LinkedList; import java.util.Queue; import java.util.logging. ...
- 非递归遍历二叉树Java版的实现代码(没写层次遍历)
直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...
- Java递归方法遍历二叉树的代码
将内容过程中经常用的内容做个记录,如下内容内容是关于Java递归方法遍历二叉树的内容. package com.wzs; public class TestBinaryTree { public st ...
- JAVA递归、非递归遍历二叉树(转)
原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...
- java创建二叉树并实现非递归中序遍历二叉树
java创建二叉树并递归遍历二叉树前面已有讲解:http://www.cnblogs.com/lixiaolun/p/4658659.html. 在此基础上添加了非递归中序遍历二叉树: 二叉树类的代码 ...
- JAVA递归、非递归遍历二叉树
前序遍历:1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历:1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序遍历:1.后序遍历左子树 2.后序遍历右子树 3.访问根节点-- ...
- Java遍历二叉树深度宽度
节点数据结构 class TreeNode { TreeNode left = null; TreeNode right = null; } 最大深度,基本思路是:使用递归,分别求出左子树的深度.右子 ...
- 【11】-java递归和非递归二叉树前序中序后序遍历
二叉树的遍历 对于二叉树来讲最主要.最基本的运算是遍历. 遍历二叉树 是指以一定的次序访问二叉树中的每个结点.所谓 访问结点 是指对结点进行各种操作的简称.例如,查询结点数据域的内容,或输出它的值,或 ...
- 非递归遍历二叉树Java实现
2018-10-03 20:16:53 非递归遍历二叉树是使用堆栈来进行保存,个人推荐使用双while结构,完全按照遍历顺序来进行堆栈的操作,当然在前序和后序的遍历过程中还有其他的压栈流程. 一.Bi ...
随机推荐
- hibernate(五)核心开发接口与对象的三种状态
本文链接:http://www.orlion.ml/37/ 一.Configuration 1.AnnotationConfiguration 2.进行配置信息的管理 3.configure()方法通 ...
- js连续指定两次或者多次的click事件(解决办法)
setTimeout (表达式,延时时间)setTimeout(表达式,交互时间)延时时间/交互时间是以豪秒为单位的(1000ms=1s) setTimeout 在执行时,是在载入后延迟指定时间后, ...
- timus_1007_代码字
题目要求:对于所有一个长度为N的字(这些字由0和1组成),在经过一条线路后,这些字可能会做如下的修改: 1. 0可能变成1,但只能发生一次. 2. 0或者1可能被去掉,但也只能发生一次. 3. 0或者 ...
- [转载]基于TFS实践敏捷-工作项跟踪
工作项跟踪(1) 可跟踪性是软件过程的重要能力,TFS主要是以工作项来实现过程的可跟踪性.曾有人问:"你们实际项目里的工作项是怎么样的?能不能让我们看看?"我也一直很好奇别的公司T ...
- 机器学习&数据挖掘笔记_19(PGM练习三:马尔科夫网络在OCR上的简单应用)
前言: 接着coursera课程:Probabilistic Graphical Models上的实验3,本次实验是利用马尔科夫网络(CRF模型)来完成单词的OCR识别,每个单词由多个字母组合,每个字 ...
- 12个来自 Codrops 的创新交互和动画效果
产品的用户体验是否被用户所接受,很大一部分取决于交互界面的设计,交互界面设计是整个产品设计中的核心,对于产品品质有着决定性的影响.这里集合了12个来自 Codrops 的创新的界面交互和动画效果,值得 ...
- Azure Redis Cache (3) 创建和使用P级别的Redis Cache
<Windows Azure Platform 系列文章目录> 在笔者之前的文档里面已经说明了,Azure Redis Cache分为三个不同的级别: - 基本,Basic,不包含SLA ...
- 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明
一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载) ...
- linux中不小心将rpm命令卸载了,怎么恢复?
今天在搭建mysql的集群服务时,安装mysql集群服务前,先卸载原来mysql的软件包,不小心将rpm的命令也给卸载掉了,这下惨了,什么也做不了了.在google了翻了好多个页面,甚至官网也看了,没 ...
- 博客已经迁移至http://www.xuechenlei.com
博客园是个非常好的公共平台,这里总有我想找的东西,本着人生在于折腾的精神和一些个性化的定制,将博客内容迁移到www.xuechenlei.com,时而同步分享到这里,欢迎访问关注: