It is kind of binary search. Since this is a sorted array, we can treat it as inorder traversal. And we can define the root node for the Tree.

So find the middle element as the root, then keep doing recursion.

 

 1 /**
 2  * Definition for binary tree
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     TreeNode *getTree(const vector<int> &num, int start, int end) {
13         if (start > end) return NULL;
14         int mid = (start + end)/2;
15         TreeNode *root = new TreeNode(num[mid]);
16         root->left = getTree(num, start, mid-1);
17         root->right = getTree(num, mid+1, end);
18         return root;
19     }
20     TreeNode *sortedArrayToBST(vector<int> &num) {
21         return getTree(num, 0, num.size()-1);
22     }
23 };

 

posted on 2015-03-19 05:38  keepshuatishuati  阅读(114)  评论(0编辑  收藏  举报