例题
对于给定的有序数组nums[],大家默认从数组中间取值作为父结点作为分割点,左边的数组元素成为它的左子树部分,右边的数组元素成为它的右子树部分。
综上,使用递归法来处理每个分割数组的树构建:
1.确定归并的参数及返回值
2.确定终止条件:
本题传入递归函数的left/right值分别是0和n-1,故left == right扔属于合法区间,故当left > right时递归终止,AVL树构建完毕。
3.确定单层递归的逻辑:
在每一层的递归中,先确定一个分割点mid,作为本层的父结点,再将数组中分割点左边的元素作为它的左子树,分割点右边的元素作为它的右子树,实现父子结点的连接。
code:
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
int n=nums.size();
TreeNode *root = sortarr(nums,0,n-1);
return root;
}
TreeNode* sortarr(vector<int>& nums,int left,int right)
{//左闭右闭
if(left > right)
return NULL;
int mid = (left+right)/2;
TreeNode *p = new TreeNode(nums[mid]);
p->left = sortarr(nums,left,mid-1);
p->right = sortarr(nums,mid+1,right);
return p;
}
};