问题描述:
把排序数组转化为高度最小的二叉搜索树。
实现思路:
初始时先把排序数组中间的值找出来作为根节点,分成了左右两部分数组,在利用递归对左右两部分进行相同的处理。
代码:
/**
* Definition of TreeNode:* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param A: A sorted (increasing order) array
* @return: A tree node
*/
TreeNode *sortedArrayToBST(vector<int> &A) {
// write your code here
if(!A.size()) return NULL;
int mid=A.size()/2;
TreeNode *s=new TreeNode(A[mid]);
if(mid>0) {
vector<int> l(A.begin(),A.begin()+mid);
s->left=sortedArrayToBST(l);
}
if((mid+1)<A.size()) {
vector<int> r(A.begin()+mid+1,A.end());
s->right=sortedArrayToBST(r);
}
return s;
};
};
感想:
将中间值拿出来作为根节点,分成两个数组,利用递归进行相同的操作。