1、将有序数组转为二叉树
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;
}
2、从二叉树顶点逐层打印所有结点数据
public static void printTreeLayer(BITNode root){
if(root == null){
return;
}
BITNode p;
LinkedList<BITNode> queue = new LinkedList<>();
//根节点入队列
queue.offer(root);
while(queue.size() > 0) {
//根节点出队列,它的子节点不为空则进入队列
p = queue.poll();
System.out.print(p.data+" ");
if(p.lchild != null)
queue.offer(p.lchild);
if(p.rchild != null)
queue.offer(p.rchild);
}
}
3、测试
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();
System.out.println("逐层打印:");
printTreeLayer(root);
}