public class ArraysBinTree {
private String []datas;//使用数组来存储各个节点的数据
private int DEFAULT_Deep=15;//默认深度
private int deep;
private int arraysize;
public ArraysBinTree(){//用默认深度创建二叉树
this.deep=DEFAULT_Deep;
this.arraysize=(int)Math.pow(2,deep)-1;
datas=new String[arraysize];
}
public ArraysBinTree(int deep){//用指定深度创建二叉树
this.deep=deep;
this.arraysize=(int)Math.pow(2,deep)-1;
datas=new String[arraysize];
}
public ArraysBinTree(int deep,String data){//用指定深度和指定根节点创建二叉树
this.deep=deep;
this.arraysize=(int)Math.pow(2,deep)-1;
datas=new String[arraysize];
datas[0]=data;
}
/*
* 为指定节点添加子节点;
*index,该子节点的父节点的索引
* data,子节点的数据
* left,判断是否是左节点
* */
public void add(int index,String data,boolean left){
if(datas[index]==null){
throw new RuntimeException("该处节点为空");
}
if(2*index+1>=arraysize){
throw new RuntimeException("数组越界");
}
if(left){
datas[2*index+1]=data;
}else{
datas[2*index+2]=data;
}
}
public boolean empty(){//判断二叉树是否为空
return datas[0]==null;
}
public String root(){//返回根节点
return datas[0];
}
public String parent(int index){//返回指定节点(非根节点)的父节点
return datas[index/2];
}
public String leftNode(int index){//返回指定节点(非叶子节点)的左子节点
return datas[2*index+1];
}
public String rightNode(int index){//返回指定节点(非叶子节点)的右子节点
return datas[2*index+2];
}
public int getDeep(){//返回二叉树的深度
return deep;
}
public int pos(String data){//返回指定节点的位置
for(int i=0;i<arraysize;i++){
if(datas[i]==data){
return i;
}
}
return -1;
}
public String toString(){
return java.util.Arrays.toString(datas);
}
public static void main(String[] args) {
ArraysBinTree binTree=new ArraysBinTree(4,"root");
binTree.add(0,"rightNode1",false);
binTree.add(2,"rightNode2",false);
binTree.add(6,"rigthNode3",false);
System.out.println(binTree);
}
}
顺序存储——二叉树
猜你喜欢
转载自blog.csdn.net/Answer0902/article/details/82454963
今日推荐
周排行