题目描述
给你一个整数数组 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;}
};