请使用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 ...
随机推荐
- java生成excel文件
首先下载jexcelapi_2_6_12.tar.gz,解压后将里面的jxl.jar复制到WEB-INF/lib目录下面 String filePath = request.getParameter( ...
- Cwinux源码解析(五)
Cwinux源码解析(五)
- linux安装nginx
nginx启动.重启.关闭 安装: http://www.cnblogs.com/skynet/p/4146083.html 一.启动 cd usr/local/nginx/sbin ./nginx ...
- java中map插入相同的key
测试用例: package test; import org.junit.Test; import po.Person; import java.util.HashMap; import java.u ...
- 加速Web开发的9款知名HTML5框架
与手工编码比起来,HTML5框架在准确性和正确率方面给予了保证.大多数HTML5框架都会有一个组合或者包含一些额外的组件,比如jQuery Scripts.CSS3样式表则以改善多媒体特征的功能性和响 ...
- 【Swift学习】Swift编程之旅---析构方法(十九)
在一个类的实例内存被释放之前,析构方法被立即调用.使用deinit关键字来声明析构方法,类似于构造方法用init来声明.析构方法只适用于类类型. 析构方法原理 Swift会自动释放不再需要的实例以 ...
- C#基础01
ASP.net基础详情 1:Momo就是跨平台的一种.net,借助其Momo可以让其.net网站跑到Lumin和安卓机上面. 2:开发的网站具有安全,速度快,容易配置. 3:互联网开发[网站]和管理系 ...
- STL : map函数的运用 --- hdu 4941 : Magical Forest
Magical Forest Time Limit: 24000/12000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- DirectX.Capture Class Library
DirectX.Capture Class Library Brian Low, 29 Mar 2008 ...
- 能不能用javascript实现素数求和问题呢?
先自己试试吧 好吧,下面这段代码用了别人所说的最笨的方法,身为小白的我只能呵呵.待会再尝试用其他算法. <!DOCTYPE html> <html lang="en&quo ...