高度最小的BST
题目描述
对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。
给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。
/*struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int data) : val(data),left(NULL),right(NULL) {} };*/ class MinimalBST { public: int getHeight(TreeNode *root){ if(!root) return 0; int hleft = getHeight(root->left); int hright = getHeight(root->right); return hleft > hright ? (hleft+1) : (hright+1); } TreeNode *build(vector<int> vals,int left,int right){ if(left > right) return NULL; int middle = left + (right-left)/2; TreeNode *root = new TreeNode(vals[middle]); root->left = build(vals,left,middle-1); root->right = build(vals,middle+1,right); return root; } int buildMinimalBST(vector<int> vals) { if(vals.size() == 0) return 0; TreeNode * root = build(vals,0,vals.size()-1); return getHeight(root); } };