分类标签:二叉树
难易度:简单
题目描述:
给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。
示例:
给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
思路:完全二叉树+递归+二分法
1.题目要求创建一个高度最小的二叉搜索树,则构建的结果要往完全二叉树上面靠拢;
2.利用二分法寻找数组中的中间数据作为根节点;
3.利用递归的方法分别寻找到构建二叉树的左子树和右子树。
代码:
struct TreeNode *helper(int *nums,int left,int right) //二分法寻找根节点
{
if(left>right)
return NULL;
struct TreeNode *res=(struct TreeNode *)malloc(sizeof(struct TreeNode));
int mid=(left+right)/2;
res->val=nums[mid];
res->left=helper(nums,left,mid-1);
res->right=helper(nums,mid+1,right);
return res;
}
struct TreeNode* sortedArrayToBST(int* nums, int numsSize){
if (nums==NULL)
return NULL;
return helper(nums,0,numsSize-1);
}