java二叉树程序,java实现二叉树

之前学习c对二叉树有一定的了解,现在学习java,想利用java来实现二叉树。

首先我们必须知道的几点关于完全二叉树:

除了最后一层以外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的部分节点

知道了这个概念还不行,我们必须知道如果将一个数组转变成二叉树,对于每一个节点的左右子节点的坐标分别是什么

对于一个完全二叉树,1、如果一个节点不是叶子节点,那么他的左子节点的坐标一定为2*i+1,如果他的左子节点的坐标小于数组的最大索引length-1,那么它一定有右子节点,坐标一定是2*i+2    2、对于一个完全二叉树,它的最大的非叶子节点在数组中的坐标一定是length/2-1

如果理解了上面的结论,创建一个完全二叉树就非常简单了。

下面是实现的具体代码:

public class BinTree {

private BinTree leftChild;

private BinTree rightChild;

private int data;

public BinTree(int data){

leftChild=null;

rightChild=null;

this.data=data;

}

//创建二叉树,返回根节点

public static BinTree createTree(int[] array){

if(array==null) return null;

if(array.length<=0) return null;

//创建根节点,左右子树为空

BinTree root=new BinTree(array[0]);

//存放每个节点信息,便于取值

List list=new ArrayList();

list.add(root);

for(int i=0;i<=array.length/2-1;i++){

BinTree left=new BinTree(array[2*i+1]);

list.add(left);

//当前节点左节点在数组中的坐标为2*i+1,右节点坐标为2*i+2

list.get(i).leftChild=left;

if(2*i+1

BinTree right=new BinTree(array[2*i+2]);

list.add(right);

list.get(i).rightChild=right;

}

}

return root;

}

}上面创建了一个完全二叉树,如果知道上面提到的二叉树的特点的话,仔细阅读代码应该和好理解,其中list的作用主要是为了帮助我们记录下每一个叶子节点的信息,这样我们在向后遍历时就方便的多。

那么如何遍历二叉树呢,在学习数据结构应该都知道,遍历二叉树分为先序后序中序三种遍历方式,遍历的方法都基本类似,唯一的区别就是输出数据语句的位置不同,下面是代码:

//先序遍历

public static void preOrderBinTree(BinTree root){

if(root==null) return;

System.out.println(root.data);

preOrderBinTree(root.leftChild);

preOrderBinTree(root.rightChild);

}

//后序遍历

public static void postOrderBinTree(BinTree root){

if(root==null) return;

postOrderBinTree(root.leftChild);

postOrderBinTree(root.rightChild);

System.out.println(root.data);

}

//中序遍历

public static void inOrderBinTree(BinTree root){

if(root==null) return;

preOrderBinTree(root.leftChild);

System.out.println(root.data);

preOrderBinTree(root.rightChild);

}其实这就是用的递归算法,仔细理解应该不难,最后运行输出就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值