Every day a leetcode
题目来源:108. 将有序数组转换为二叉搜索树
解法1:递归
中序遍历,总是选择中间位置左边的数字作为根节点。
选择中间位置左边的数字作为根节点,则根节点的下标为:mid = (left + right)/2。
递归实现即可。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* buildBST(int* nums, int left, int right)
{
if(left>right) return NULL;
int mid=(left+right)/2;
struct TreeNode* root=malloc(sizeof(struct TreeNode));
root->val=nums[mid];
root->left=buildBST(nums,left,mid-1);
root->right=buildBST(nums,mid+1,right);
return root;
}
struct TreeNode* sortedArrayToBST(int* nums, int numsSize){
return buildBST(nums,0,numsSize-1);
}
结果:
示例:
可以发现,我们总是选择中间位置左边的数字作为根节点。