因为是有序整数数组,所以我门很容易想到类似于二分法的方式进行获取二叉树的结点,首先根据数组的首尾索引得到二叉树根节点的data,int index = (start+end+1)/2,root.data = arr[index],然后对根节点左右子树采用递归。
public static BITNode arrayToTree(int[] arr,int start,int end){
BITNode root = null;
if(end >= start){
root = new BITNode();
int mid = (start + end + 1)/2;
//二叉树根节点为数组中间的元素
root.data = arr[mid];
//递归方法用左半部分数组构造root的左子树
root.lchild = arrayToTree(arr,start,mid-1);
//递归方法用右半部分数组构造root的右子树
root.rchild = arrayToTree(arr,mid+1,end);
}else{
root = null;
}
return root;
}
接着将得到的二叉树通过中序遍历后,进行测试。
/**
* 用中序遍历的方式打印出二叉树节点的内容
*/
public static void printTreeByMidOrder(BITNode root){
if(root == null){
return;
}
//遍历左子树
if(root.lchild != null){
printTreeByMidOrder(root.lchild);
}
//遍历root结点
System.out.print(root.data+" ");
//遍历右子树
if(root.rchild != null){
printTreeByMidOrder(root.rchild);
}
}
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
System.out.print("数组: ");
for(int i:arr){
System.out.print(i+" ");
}
System.out.println();
BITNode root = arrayToTree(arr,0,arr.length-1);
System.out.println("数组转换为二叉树,中序遍历为:");
printTreeByMidOrder(root);
System.out.println();
}