题目描述
对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。
给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。
1 class MinimalBST
2 {
3 public:
4 TreeNode *BulidBST(vector<int>vt,int l,int r)
5 {
6 if(l>r)return NULL;
7 int mid=l+(r-l)/2;
8 TreeNode *root=new TreeNode(vt[mid]);
9 root->left=BulidBST(vt,l,mid-1);
10 root->right=BulidBST(vt,mid+1,r);
11 return root;
12 }
13
14 int depth(TreeNode *root)
15 {
16 if(root==NULL)
17 {
18 return 0;
19 }
20 int l=depth(root->left)+1;
21 int r=depth(root->right)+1;
22 return ((l>r)?(l):(r));
23 }
24
25
26 int buildMinimalBST(vector<int> vals)
27 {
28 int lf=0;
29 int rg=vals.size()-1;
30 TreeNode *T = BulidBST(vals,lf,rg);
31 return depth(T);
32 }
33 };