/**
* 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) {
if (A.size()==0)
return NULL;
int len = A.size();
int mid = (len-1)/2;
TreeNode *root = new TreeNode(A[mid]);
if (len == 1) {
return root;
}
root->left = create(A,0,mid-1);
root->right = create(A,mid+1,len-1);
return root;
}
TreeNode* create( vector<int>& A, int start,int end){
if (start > end)
return NULL;
int mid = (start + end)/2;
TreeNode * node = new TreeNode(A[mid]);
node->left = create(A,start,mid-1);
node->right = create(A,mid+1,end);
return node;
}
};
对于C++递归构造树,需要注意的点很多,这里我就总结了一条,就是递归构造的时候,先声明根节点root,new出根节点,初始化后,再依次调用函数生成root->left和root->right两颗子树,在递归函数中,也要返回指向Node的指针或者NULL;C++代码: