高度最小的BST

题目描述

对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。

给定一个有序序列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 };
原文地址:https://www.cnblogs.com/achao123456/p/7570626.html