CC20:高度最小的BST
题目
对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。
给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。
解法
这道题感觉如果没有创建树的话也能过,因为是二叉查找树,那最优的情况肯定就是按照满二叉树的方式去创建,那么只要简单计算一下层数就ok的,代码如下:
class MinimalBST {
public:
int buildMinimalBST(vector<int> vals) {
// write code here
int length=vals.size();
int height;
if(length<=0)
return 0;
while(length)
{
++height;
length=length>>1;
}
return height;
}
};
如果是按照规矩来创建一个树来做的话,就需要这样:
struct TreeNode
{
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};
class MinimalBST
{
public:
TreeNode* buildBST(vector<int>vals,int left,int right,int *depth)
{
if(left>right)
{
*depth=0;
return NULL;
}
if(left==right)
{
*depth=1;
TreeNode* root=new TreeNode(vals[left]);
root->left=root->right=NULL;
return root;
}
else
{
int mid=(left+right)/2;
int begin,end;
TreeNode *root=new TreeNode(vals[mid]);
root->left=buildBST(vals,left,mid-1,&begin);
root->right=buildBST(vals,mid+1,right,&begin);
*depth=1+(begin>end?begin:end);
return root;
}
}
int buildMinimalBST(vector<int> vals)
{
int left=0,right=vals.size(),depth=0;
if(right==0)
return 0;
buildBST(vals,left,right,&depth);
}
};
作者:YunLambert
-------------------------------------------
个性签名:一名会音乐、爱健身的不合格程序员
可以Follow博主的Github哦(っ•̀ω•́)っ✎⁾⁾