给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树。
二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排序的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。
给定二叉搜索树的中序遍历,是否可以唯一地确定二叉搜索树?答案是否定的。如果没有要求二叉搜索树的高度平衡,则任何一个数字都可以作为二叉搜索树的根节点,因此可能的二叉搜索树有多个。
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;//左指针
* struct TreeNode *right;//右指针
* };
*/
typedef struct TreeNode TreeNode;//创建一个新结点
struct TreeNode* balance(int* nums, int left, int right){
if(left > right) return NULL; //不存在情况,返回空
int mid = (left + right) / 2;
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); //创建根节点
root -> val = nums[mid]; //数组最中间的元素作为根节点存储
root -> left = balance(nums, left, mid - 1);//递归调用左子树
root -> right = balance(nums, mid + 1, right);//递归调用右子树
return root;
}
struct TreeNode* sortedArrayToBST(int* nums, int numsSize) {
return balance(nums, 0, numsSize - 1);//递归调用
}