给定一个没有重复元素的整数数组。根据此数组构建的最大二叉树定义如下:
- root是数组中的最大数字。
- 左子树是根据最大数字左侧的子数组构建的最大二叉树。
- 右子树是根据最大数字右侧的子数组构建的最大二叉树。
通过给定的数组构造最大二叉树并返回此树的根节点。
样例
样例 1:
输入: {3,2,1,6,0,5}
输出: 返回代表下面这棵树的根节点:
6
/ \
3 5
\ /
2 0
\
1
样例 2:
输入: {1,2,3,4}
输出: 返回代表下面这棵树的根节点:
4
/
3
/
2
/
1
注意事项
给定的数组的大小范围为 [1,1000]。
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param nums: an array
* @return: the maximum tree
*/
TreeNode * constructMaximumBinaryTree(vector<int> &A)
{
// Write your code here
if(A.size() == 0)
return NULL;
return creat(A, 0, A.size() - 1);
}
TreeNode* creat(vector<int> &A, int left, int right)
{
if(left > right)
return NULL;
if(left == right)
return new TreeNode(A[left]);
//int mid = (left + right) / 2;
int mid = left;
for(int i = left; i <= right; i++)
{
if(A[i] > A[mid])
{
mid = i;
}
}
TreeNode* cur = new TreeNode(A[mid]);
cur->left = creat(A, left, mid-1);
cur->right = creat(A, mid+1, right);
return cur;
}
};