java使用顺序数组实现二叉树
顺序数组实现二叉树
实现原理
对于下标为index的节点其满足
1.左孩子节点的下标为2index+1
2.右孩子节点的下标为2index+2
代码实现
package tree;
public class ArrayBinaryTree {
private int[] arr;
public ArrayBinaryTree(int[] arr)
{
this.arr=arr;
}
public void preOrder(int index)
{
if(arr==null||arr.length==0)
{
System.out.println("数组为空,不可以按照二叉树的前序遍历");
}
System.out.println(arr[index]);
//向左进行前序遍历
if(index*2+1<arr.length)//防止数组下标越界
{
preOrder(2*index+1);
}
//向右递归
if(index*2+2<arr.length)
{
preOrder(2*index+2);
}
}
public void infixOrder(int index)
{
if(arr==null||arr.length==0)
{
System.out.println("数组为空,不可以按照二叉树来进行遍历~");
}
if(2*index+1<arr.length)
{
infixOrder(2*index+1);
}
System.out.println(arr[index]);
if(2*index+2<arr.length)
{
infixOrder(2*index+2);
}
}
public void postOrder(int index)
{
if(arr==null||arr.length==0)
{
System.out.println("数组为空,不可以按照二叉树来进行遍历~");
}
if(2*index+1<arr.length)
{
infixOrder(2*index+1);
}
System.out.println(arr[index]);
if(2*index+2<arr.length)
{
infixOrder(2*index+2);
}
System.out.println(arr[index]);
}
}
package tree;
public class ArrayBinaryTreeDemo {
public static void main(String[] args) {
int[] arr= {1,2,3,4,5,6,7,};
ArrayBinaryTree arrBinaryTree=new ArrayBinaryTree(arr);
arrBinaryTree.preOrder(0);
arrBinaryTree.infixOrder(0);
arrBinaryTree.postOrder(0);
}
}
主要应用
- 堆排序
java使用顺序数组实现二叉树的更多相关文章
- java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
- Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)
Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)
- Java比较器对数组,集合排序一
数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...
- java 多维数组遍历
java 多维数组遍历的顺序的性能问题 ps:下图为java多维数组内存分布原理.出自:http://math.hws.edu/javanotes/c7/two-dimensional-array.p ...
- 第81节:Java中的数组
第81节:Java中的数组 本节介绍数组的基本概念,数据就是一种数据结构,可以用来存储多个数据,每个数组中可以存放相同类型的数据.比如,在学校,我们是一个班,这里的班级中每个同学都是这个班级数组中的元 ...
- Java中的数组与集合
此文转载自:http://student-lp.iteye.com/blog/2082362 在java编程的过程中,我们不能确定某一类型的对象到底会需要多少,为了解决这个问题,java提供了容纳对象 ...
- Java进阶2 数组内存和对象的内存管理知识
Java进阶2 数组内存和对象的内存管理知识 20131028 前言: 在面试的时候,如果是Java的编程语言,也许你认为没有什么可以问的,只能够说明你对于Java了解的太浅了,几乎就是两个星期的节奏 ...
- java实现顺序表、链表、栈 (x)->{持续更新}
1.java实现节点 /** * 节点 * @luminous-xin * @param <T> */ public class Node<T> { T data; Node& ...
- java初级之数组详解
一,数组的概念: 数组是为了存储同一种数据多个元素的集合,也可以看成是一个容器,数组既可以存储基本数据类型,也可以存储引用数据类型,数组是为了存储同种数据类型的多个值. 1.1.1,一维数组重点: 数 ...
随机推荐
- mysql时区配置
1.修改linux系统时区:ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime 修改为美洲美国洛杉矶时间 2.查看mysql时区 ...
- Spring——注解
一.IOC注解 1.用于向Spring容器中注入bean: @Component:向Spring容器中注入bean @Repository:用于标注Dao层 @Service:用于标注Service业 ...
- HDU 5115 Dire Wolf ——(区间DP)
比赛的时候以为很难,其实就是一个区间DP= =..思路见:点我. 区间DP一定要记住先枚举区间长度啊= =~!因为区间dp都是由短的区间更新长的区间的,所以先把短的区间更新完.. 代码如下: #inc ...
- iOS真机调试之免费预配(Free provisioning)
免费预配允许开发者在不加入Applec Developer Program的情况下,可以发布和测试App 注意:免费预配(Free Provisioning)与自动预配(Auto Provisioni ...
- Servlet——理解会话Session
1.什么是会话(Session) 超文本传输协议(HTTP)被设计成一种无状态的协议. 所谓无状态协议就是指在服务器端的请求彼此相互之间是不认识彼此的,哪怕是来自同一个客户端的请求,相互之间也是不认识 ...
- python 购物车+用户认证程序
创建文件a.txt,b.txt.c.txt用于存放应该持续保存的信息 a.txt :用户密码输入错误3次就锁定 b.txt :购物时的活动,每个用户只能参与一次 c:txt :购物完后的发票在这里查看 ...
- [Java]算术表达式求值之三(中序表达式转二叉树方案 支持小数)
Entry类 这个类对表达式的合法性进行了粗筛: package com.hy; import java.io.BufferedReader; import java.io.IOException; ...
- JSON-Runoob-工具:Json 格式化工具
ylbtech-JSON-Runoob-工具:Json 格式化工具 1.返回顶部 1. http://c.runoob.com/front-end/53 2. 2.返回顶部 3.返回顶部 4. ...
- log4j日志配置文件
log4j.properties: ### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制抬 ### log4j.appender.stdo ...
- Node.js的事件轮询Event Loop原理
Node.js的事件轮询Event Loop原理解释 事件轮询主要是针对事件队列进行轮询,事件生产者将事件排队放入队列中,队列另外一端有一个线程称为事件消费者会不断查询队列中是否有事件,如果有事件,就 ...