Leecode 108
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
方法一:
递归法,每次选择中间作为root,类似于二分法。树类的算法大多可以用递归解决。
代码:
TreeNode* Leecode108_sortedArrayToBST(std::vector<int>& nums) {
if (nums.size() == 0) return NULL;
int mid = nums.size() / 2;
TreeNode* root = new TreeNode(nums[mid]);
std::vector<int> left_num, right_num;
for (int i = 0; i < mid; i++)
left_num.push_back(nums[i]);
for (int i = mid + 1; i < nums.size(); i++)
right_num.push_back(nums[i]);
root->left = Leecode108_sortedArrayToBST(left_num);
root->right = Leecode108_sortedArrayToBST(right_num);
return root;
}