一、题目描述
对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。
二、题目思路
可以利用递归构建起整棵树,然后再计算数的高度;或者不去构建树,直接利用递归去求解高度。
三、代码
import java.util.*;
class TreeNode{
int val;
TreeNode left=null;
TreeNode right=null;
TreeNode(int data){
this.val=data;
}
}
public class MinimalBST {
public int buildMinimalBST(int[] vals) {
// write code here
if(vals==null || vals.length<1)
return 0;
return highBST(vals,0,vals.length-1);//直接调用递归来求解高度
// TreeNode root= buildBST(vals,0,vals.length-1);//下面这两句是先构造树然后计算数的高度
// return highBST(root);
}
private int highBST(int[] vals,int start,int end){
if(end<start)
return 0;
int middle=start+(end-start)/2;
int left=1+highBST(vals,start,middle-1);
int right=1+highBST(vals,middle+1,end);
return Math.max(left,right);
}
private TreeNode buildBST(int[] vals,int start,int end){
if(end<start)
return null;
int middle=start+(end-start)/2;
TreeNode root=new TreeNode(vals[middle]);
root.left=buildBST(vals,start,middle-1);
root.right=buildBST(vals,middle+1,end);
return root;
}
private int highBST(TreeNode root){
if(root==null)
return 0;
int left=highBST(root.left);
int right=highBST(root.right);
return (left>right)?(left+1):(right+1);
}
}