面试19之创建一颗高度最小的二叉搜索树

来源:互联网 发布:jq的数组点击显示隐藏 编辑:程序博客网 时间:2024/05/16 17:24
题目描述
对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。

给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。


注意:这只是求高度最小的二叉查找树,不是真的要构建一颗树,完全二叉树的高度最小。为log2^n + 1


//第一种方式,二分法,非递归写法。

int BuildMinimalBST(vector<int> vals){int left = 0;int right = vals.size()-1;int count = 0;while(left <= right){count++;int mid = left+( (right-left) >> 1);if(mid-left < right-mid) //左区间中的元素小于右区间中的元素。{left = mid + 1;}else  //左区间中的元素个数大于右区间中的元素个数。{right = mid - 1;}}return count;}

//第二种方式:递归写法。

int CreateMinBST(int start,int end){if(start > end)return 0;int mid = start+( (end - start) >> 1);int  left = CreateMinBST(start,mid-1);int  right = CreateMinBST(mid+1,end);return left > right ? left+1 : right+1;}int BuildMinimalBST(vector<int> vals){return CreateMinBST(0,vals.size()-1);}




0 0