import java.util.LinkedList;
import java.util.List;
public class createBinaryTree {
int [] array={1,2,3,5,6,7,8,9,11,23,45};
static List<BinaryNode> nodelist=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
createBinaryTree ct=new createBinaryTree();
ct.createBinaryTree();
BinaryNode root=nodelist.get(0);
ct.preOrder(root);
int high=ct.hight(root);
System.out.println("hight is "+high+"");
int size=ct.size(root);
System.out.println("size is "+size+"");
}
public void createBinaryTree(){
nodelist=new LinkedList<BinaryNode>();
// 将一个数组的值依次转换为Node节点
for(int i=0;i<array.length;i++){
nodelist.add(new BinaryNode(array[i]));
}
// 对前lastParentIndex-1个父节点按照父节点与孩子节点的数字关系建立二叉树
for(int parentIndex=0;parentIndex<array.length/2-1;parentIndex++){
// 左孩子
nodelist.get(parentIndex).leftchild=nodelist.get(parentIndex*2+1);
// // right孩子
nodelist.get(parentIndex).rightchild=nodelist.get(parentIndex*2+2);
}
// 最后一个父节点:因为最后一个父节点可能没有右孩子,所以单独拿出来处理
int lastparentIndex=array.length/2-1;
nodelist.get(lastparentIndex).leftchild=nodelist.get(lastparentIndex*2+1);
// 右孩子,如果数组的长度为奇数才建立右孩子
if(array.length%2==1){
nodelist.get(lastparentIndex).rightchild=nodelist.get(lastparentIndex*2+2);
}
}
//树的高度
public int hight(BinaryNode node){
if(node==null){
return 0;
}
int i=hight(node.leftchild);
int j=hight(node.rightchild);
return (i<j)?(j+1):(i+1);
}
//节点个数
public int size(BinaryNode node){
if(node==null){
return 0;
}
return 1+size(node.leftchild)+size(node.rightchild);
}
//先序遍历
public void preOrder(BinaryNode node){
if(node==null){
return;
}
System.out.println(node.data);
preOrder(node.leftchild);
preOrder(node.rightchild);
}
//中序遍历
public void inorder(BinaryNode node) {
if(node==null){
return;
}
preOrder(node.leftchild);
System.out.print(node.data);
preOrder(node.rightchild);
}
//后序遍历
public void behandorder(BinaryNode node){
if(node==null){
return;
}
preOrder(node.leftchild);
preOrder(node.rightchild);
System.out.print(node.data);
}
private class BinaryNode{
BinaryNode leftchild;
BinaryNode rightchild;
int data;
BinaryNode(int newdata){
leftchild=null;
rightchild=null;
data=newdata;
}
}
}