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 };
时间: 2024-10-28 07:31:35