将数组转化为平衡二叉树,方法是将数组中间的数作为根节点,数组左边为左节点,数组右边为右节点。
注意点:
1.注意中间节点的选择:size=end-start+1;mid=start+(size/2);(网上基本上都是(end-start)/2,个人感觉不合理)。
参考了人家的文章:https://blog.csdn.net/u012814856/article/details/77894863
代码:
TreeNode* trval(vector& nums,intstart,intend)
{
if(start>end)
return NULL;
intsize=end-start+1;
intmid=start+(size/2);
TreeNode* root=newTreeNode(nums[mid]);
if(mid==start)
root->left=NULL;
else
root->left=trval(nums, start, mid-1);
if(mid==end)
root->right=NULL;
else
root->right=trval(nums, mid+1, end);
returnroot;
}
TreeNode* sortedArrayToBST(vector& nums)
{
TreeNode* root=trval(nums,0,nums.size()-1);
returnroot;
}