顺序存储——二叉树

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