二叉树的性质:
- 二叉树第i层的节点数目至多为2^(i-1),i>=1;
- 深度为k的二叉树至多有2^k-1个节点;
- 具有n个节点的完全二叉树的深度为
- 顺序存储充分利用满二叉树的特性
- 顺序存储结构会有一定的空间浪费
package com.answer.binaryTree;
public class ArrayBinTree {
private int DEFAULT_SIZE=5;
private int arraySize=0;
private String[] elements;
private int deep;
public ArrayBinTree(){
this.deep=DEFAULT_SIZE;
this.arraySize=(int)Math.pow(2,deep)-1;
elements=new String[arraySize];
}
public ArrayBinTree(int deep){
this.deep=deep;
this.arraySize=(int)Math.pow(2,deep)-1;
elements=new String[arraySize];
}
public ArrayBinTree(String data,int deep){
this.deep=deep;
this.arraySize=(int)Math.pow(2,deep)-1;
elements=new String[arraySize];
elements[0]=data;
}
/*
为指定节点添加子节点;
*/
public void add(int index,String data,boolean left){
if(2*index+1>=arraySize){
throw new RuntimeException("越界!");
}
if(elements[index]==null){
throw new RuntimeException("父节点为空!");
}
if(left){
elements[2*index+1]=data;
}else {
elements[2*index+2]=data;
}
}
public boolean empty(){
return elements[0]==null;
}
public String root(){
return elements[0];
}
public String getPar(int index){
return elements[(index-1)/2];
}
public String getLeft(int index){
if(2*index+1>=arraySize){
throw new RuntimeException("越界!");
}
return elements[2*index+1];
}
public String getRight(int index){
if(2*index+1>=arraySize){
throw new RuntimeException("越界!");
}
return elements[2*index+2];
}
public int getDeep(){
return deep;
}
public int pos(String data){
for(int i=0;i<arraySize;i++){
if(data.equals(elements[i])){
return i;
}
}return -1;
}
public String toString(){
return java.util.Arrays.toString(elements);
}
public static void main(String[] args){
ArrayBinTree tree=new ArrayBinTree("root",3);
tree.add(0,"A",true);
tree.add(0,"B",false);
tree.add(2,"C",false);
System.out.println(tree.getDeep());
System.out.println(tree.toString());
System.out.println(tree.getPar(6));
System.out.println(tree.getRight(2));
System.out.println(tree.empty());
}
}