Leetcode---654. 最大二叉樹
給定一個不含重複元素的整數陣列。一個以此陣列構建的最大二叉樹定義如下:
- 二叉樹的根是陣列中的最大元素。
- 左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。
- 右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。
通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。
Example 1:
輸入: [3,2,1,6,0,5] 輸入: 返回下面這棵樹的根節點: 6 / \ 3 5 \ / 2 0 \ 1
注意:
給定的陣列的大小在 [1, 1000] 之間。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
這道題的解法和由中序和前序構建二叉樹的那道題有點類似,函式裡用了st,ed兩個變數來記錄區間的端點。
思路不難,直接程式碼吧。
AC:
class Solution {
public:
TreeNode* fun(vector<int>& nums,int st,int ed)
{
if(st>ed) //如果st<ed,那麼也就是說這個區間不存在,就說明這個指標為NULL。
return NULL;
int max=nums[st];
int k=st;
for (int i=st;i<=ed;i++)
{
if (max<nums[i])
{
max=nums[i];
k=i;
}
}
TreeNode* r=new TreeNode(max);
r->left=fun(nums,st,k-1);
r->right=fun(nums,k+1,ed);
return r;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if (nums.size()==0)
return NULL;
return fun(nums,0,nums.size()-1);
}
};
今天寫的多文件編輯器讓我完成的挺好的,今天還行吧,,,,,,,,,,,,,