題目描述:
給定一個不含重複元素的整數數組。一個以此數組構建的最大二叉樹定義如下:
二叉樹的根是數組中的最大元素。
左子樹是通過數組中最大值左邊部分構造出的最大二叉樹。
右子樹是通過數組中最大值右邊部分構造出的最大二叉樹。
通過給定的數組構建最大二叉樹,並且輸出這個樹的根節點。
Example 1:
輸入: [3,2,1,6,0,5]
輸入: 返回下面這棵樹的根節點:
6
/ \
3 5
\ /
2 0
\
1
注意:
給定的數組的大小在 [1, 1000] 之間。
代碼:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if(nums.size()==0)return NULL;
else if(nums.size()==1){
TreeNode * node=new TreeNode(nums[0]);
return node;
}
else{
int max=0;
for(int i=0;i<nums.size();i++){
if(nums[i]>nums[max])
max=i;
}
vector<int> left_num,right_num;
for(int i=0;i<max;i++){
left_num.push_back(nums[i]);
}
for(int j=max+1;j<nums.size();j++){
right_num.push_back(nums[j]);
}
TreeNode * node=new TreeNode(nums[max]);
node->left=constructMaximumBinaryTree(left_num);
node->right=constructMaximumBinaryTree(right_num);
return node;
}
}
};