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性能分析之Query Optimizer
简书作者:Sio 文章出处: MySql优化之索引原理与 SQL 优化 Query Optimizer MySQL Optimizer是一个专门负责优化SELECT 语句的优化器模块,它主要的功能就是 ...
- HDU 5810 Balls and Boxes ——(数学,概率,方差)
官方题解看不太懂,参考了一些人的博客以后自己证明如下: 其中D(X)和E(X)的公式如下(参考自百度百科): 其中 p = 1 / m .(这是每一个单独事件发生的概率期望,在这里单独事件指的是一个球 ...
- mysql java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone.
连接数据库时报错: The server time zone value '?й???????' is unrecognized or represents more than one time zo ...
- 6 Java Shell排序
希尔排序是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序. 1.基本思想 将待排序数组按照步长gap进行分组,然后将 ...
- 小程序web-view利用url给内嵌的网页传值
这个方法跟网页上的一样,直接通过截取url中传过来的参数来取值 <web-view src="https://www.baidu.com/test.html?url=http://ww ...
- 用 dnSpy 反编译调试 .NET 程序
dnSpy 官网下载:https://github.com/0xd4d/dnSpy/releases 运行需要 .NET Framework 4 环境:https://dotnet.microsoft ...
- SUSE系列---修改IP和hosts文件
有些时候我们需要修改linux系统的IP,此时我们要注意,修改IP之后,如果我们如果不修改hosts文件,那么可能我们一些服务会无法使用:下面分别记录修改IP和hosts文件的方法: 修改IP: 打开 ...
- Java静态函数、父类、子类执行顺序
package class_test; /** * 静态函数.父类.子类执行顺序 * @author root * */ public class Test { public static void ...
- LC 272. Closest Binary Search Tree Value II 【lock,hard】
Given a non-empty binary search tree and a target value, find k values in the BST that are closest t ...
- Mybaits-Maven项目之逆向工程(代码自动生成)
1.添加maven插件,让maven环境支持mybatis-generator组件 在pom.xml里面添加如下代码: <project xmlns="http://maven.apa ...