高度最小的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);
    }
};

 

posted on 2017-04-19 21:00  123_123  阅读(112)  评论(0编辑  收藏  举报