一、原文
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example:
Given the sorted array: [-10,-3,0,5,9],
One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:
0
/ \
-3 9
/ /
-10 5
二、翻译
给定一个数组,其中元素按升序排序,将其转换为高度平衡的二叉搜索树(BST)。
对于这个问题来说,高度平衡的二叉树被定义为一个其每个节点的两个子树的深度相差不超过1的二叉树。
三、分析
BST的中序遍历是一个有序的结果,故可以得知一个有序的中间位置一定是这个BST的根节点,左右两侧对应左子树和右子树,递归定义下去就是左边的中间位置是左子树的根节点,右边的中间位置是右子树的根节点。
既然知道这个递归定义,那么代码用递归就可以了。
四、AC代码
TreeNode* sortedArrayToBST(vector<int>& nums) {
return fuc(nums, 0, nums.size() - 1);
}
TreeNode* fuc(vector<int>& nums, int left, int right) {
if (left > right) {
return NULL;
}
int mid = (left + right) / 2;
TreeNode* node = new TreeNode(nums[mid]);
node->left = fuc(nums, left, mid - 1);
node->right = fuc(nums, mid + 1, right);
return node;
}