题目描述
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
题目分析
由于二叉搜索树的中序遍历是升序的,因此可以将本题看作根据中序遍历的序列修复二叉搜索树。
- 由于本题要求高度平衡,因此我们需要选择升序序列的中间元素作为根节点;
- 中间元素左边的升序序列构建左子树,右边的升序序列构建右子树;
- 递归执行上述步骤,直至完全恢复二叉搜索树(即left > right)
Code
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
return builder(nums, 0, nums.size() - 1);
}
private:
TreeNode* builder(vector<int>& nums, int left, int right) {
if (left > right) {
return nullptr;
}
int mid = (left + right) / 2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = builder(nums,left,mid - 1);
root->right = builder(nums, mid + 1,right);
return root;
}
};