标签:bar divide struct ++ 构造 for put ber array
Given an integer array with no duplicates. A maximum tree building on this array is defined as follow:
Construct the maximum tree by the given array and output the root node of this tree.
Example 1:
Input: [3,2,1,6,0,5] Output: return the tree root node representing the following tree: 6 / 3 5 \ / 2 0 1
Note:
思路:
用一个map来存储对应的数值和下标,正好利用map里面值是有序的特性,map里面最后一个值即为最大值。然后递归构造左子树和右子树。
TreeNode* maxtree(vector<int>& nums,int left,int right) { if(left>right || nums.size()==0 || left<0 || right>=nums.size())return NULL; map<int,int>mp; for(int i=left;i<=right;i++)mp[nums[i]] =i; auto it = mp.rbegin(); int maxnum = it->first; TreeNode* root = new TreeNode(maxnum); TreeNode* leftT = maxtree(nums,left,it->second -1); TreeNode* rightT = maxtree(nums,it->second +1,right); root->left = leftT,root->right =rightT; return root; } TreeNode* constructMaximumBinaryTree(vector<int>& nums) { return maxtree(nums,0,nums.size()-1); }
[leetcode-654-Maximum Binary Tree]
标签:bar divide struct ++ 构造 for put ber array
原文地址:http://www.cnblogs.com/hellowooorld/p/7294195.html