方法一:递归
升序数组就是二叉搜索树的中序遍历
通过中序遍历加前序遍历或者中序遍历加后序遍历来还原一棵树。前序(后序)遍历的作用呢?提供根节点!然后根据根节点,就可以递归的生成左右子树。
平衡二叉树,既然要做到平衡,我们只要把根节点选为数组的中点即可。
注意这里的边界情况,包括左边界,不包括右边界。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
TreeNode* creatbst(vector<int>& nums,int i,int j){
TreeNode* root;
if(i==j)
return NULL;
int mid=(i+j)/2;
root=new TreeNode(nums[mid]);
root->left=creatbst(nums,i,mid);
root->right=creatbst(nums,mid+1,j);
return root;
}
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
if(nums.empty())
return NULL;
return creatbst(nums,0,nums.size());
}
};