Convert Sorted Array to Binary Search Tree [LeetCode]

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

Summary: pretty easy, recursive staff.

 1 class Solution {
 2 public:
 3     TreeNode *sortedArrayToBST(vector<int> &num) {
 4         int size = num.size();
 5         if(size == 0) 
 6             return NULL;
 7         if(size == 1)
 8             return new TreeNode(num[0]);
 9         if(num.size() % 2 == 1) {
10             TreeNode * root = new TreeNode(num[size/2]);
11             if(size/2 - 1 >= 0){
12                vector<int> left(num.begin(), num.begin() + size/2); 
13                root->left = sortedArrayToBST(left);
14             }
15             if(size/2 + 1 < size) {
16                 vector<int> right(num.begin() + size/2 + 1, num.end());
17                 root->right = sortedArrayToBST(right);
18             }
19             return root;
20         }else {
21             TreeNode * root = new TreeNode(num[size/2 - 1]);
22             if(size/2 - 1 - 1 >= 0){
23                 vector<int> left(num.begin(), num.begin() + size/2 - 1); 
24                 root->left = sortedArrayToBST(left);
25             }
26             if(size/2 - 1 + 1 < size) {
27                 vector<int> right(num.begin() + size/2 -1 + 1, num.end());
28                 root->right = sortedArrayToBST(right);
29             }
30             return root;
31         }
32     }
33 };

 

posted @ 2013-11-03 06:51  假日笛声  阅读(193)  评论(0编辑  收藏  举报