Leetcode解题: Convert Sorted Array to Binary Search Tree (108)

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

解法1: Recursion

很多Tree的问题都可以用Divide & Conquer/递归的思想。这题也如此。要建立balanced tree,我们需要左边和右边的height尽可能相近。就考虑到选择中间作为root。之后就转化为把左array和右array转换的问题,这就是一个递归。

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
if (nums.empty()) {
return NULL;
}
return helper(nums, 0, nums.size() - 1);
}
TreeNode* helper(vector<int>& nums, int start, int end) {
if (start > end) {
return NULL;
}
if (start == end) {
return new TreeNode(nums[start]);
}
int middle = start + (end - start) / 2;
TreeNode* root = new TreeNode(nums[middle]);
TreeNode* left = helper(nums, start, middle - 1);
TreeNode* right = helper(nums, middle + 1, end);
root->left = left;
root->right = right;
return root;
}
};

Java

1