1、题目描述
2、分析
找出最大元素,然后分割数组调用。
3、代码
1 TreeNode* constructMaximumBinaryTree(vector<int>& nums) { 2 int size = nums.size(); 3 if (size == 0) 4 return NULL; 5 TreeNode *dummy = new TreeNode(0); 6 maxcont(dummy->left, 0, size-1, nums); 7 return dummy->left; 8 } 9 10 void maxcont(TreeNode* &parent, int left, int right, vector<int>& nums) 11 { 12 if (left > right ) 13 return ; 14 int maxindex = find_max(left, right, nums); 15 TreeNode *tmp = new TreeNode(nums[maxindex]); 16 parent = tmp; 17 maxcont(tmp->left, left, maxindex-1, nums); 18 maxcont(tmp->right, maxindex + 1, right, nums); 19 } 20 21 int find_max(int left, int right, vector<int> &nums) 22 { 23 int n = 0; 24 int maxVal = INT_MIN; 25 for (int i = left; i <= right ; i++) { 26 if ( nums[i] > maxVal) { 27 maxVal = nums[i]; 28 n = i; 29 } 30 31 } 32 return n; 33 }