Skip to content

Commit 504e3a4

Browse files
committed
Create 654-MaximumBinaryTree.cpp
1 parent 6e5ea1e commit 504e3a4

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

654-MaximumBinaryTree.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
10+
* right(right) {}
11+
* };
12+
*/
13+
class Solution {
14+
public:
15+
void dfs(std::vector<int>& nums, TreeNode* node, int left, int right) {
16+
if(left >= right){return;}
17+
18+
int idx(left), mx(0);
19+
for(int p = left; p < right; p++) {
20+
if(nums[p] > mx){mx = nums[p]; idx = p;}
21+
}
22+
23+
node->val = mx;
24+
if(left < idx) {
25+
TreeNode* ln = new TreeNode();
26+
dfs(nums, ln, left, idx);
27+
node->left = ln;
28+
}
29+
if(idx + 1 < right) {
30+
TreeNode* rn = new TreeNode();
31+
dfs(nums, rn, idx + 1, right);
32+
node->right = rn;
33+
}
34+
35+
}
36+
37+
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
38+
TreeNode* root = new TreeNode();
39+
dfs(nums, root, 0, nums.size());
40+
return root;
41+
}
42+
}
43+
;

0 commit comments

Comments
 (0)