题目
原文:
Given a sorted (increasing order) array, write an algorithm to create a binary tree with minimal height.
译文:
给一个已经排好序(增序)的数组,写一个算法创建一个具有最小高度二叉树。
解答
要使二叉树高度最小,则其左右结点数应相当。那么将数组对半分,以中间数为父结点,左边为小于父结点的数,右边为不小于父结点的数,依此做递归,遍历完所以数即可,代码如下:
class Q4_3{
public static void buildMinHeightBTree(TreeNode parent,int[] arr,int start,int end){
if(start<=end){
int mid=(start+end)>>1;
TreeNode tn=new TreeNode();
tn.value=arr[mid];
tn.parent=parent;
if(parent.value>tn.value){
parent.lchild=tn;
}else{
parent.rchild=tn;
}
buildMinHeightBTree(tn,arr,start,mid-1);
buildMinHeightBTree(tn,arr,mid+1,end);
}
}
public static void main(String[] args){
int[] arr = new int[]{1,3,4,5,6,7,8};
TreeNode root = new TreeNode();
root.value = 5;
buildMinHeightBTree(root,arr,0,2);
buildMinHeightBTree(root,arr,4,6);
System.out.println(TreeNode.printTree(root));
}
}
class TreeNode{
int value;
TreeNode lchild;
TreeNode rchild;
TreeNode parent;
public static String printTree(TreeNode root){
if(root==null){
return "#";
}else{
return root.value+"("+printTree(root.lchild)+","+printTree(root.rchild)+")";
}
}
}
如有更好的方法,还望交流!
---EOF---