leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
0654.cpp (1002B)
0 class Solution {
1 struct record {
2 TreeNode **parent;
3 int start, end;
4 record(TreeNode **p, int s, int e) : parent(p), start(s), end(e) {}
5 };
7 public:
8 TreeNode *constructMaximumBinaryTree(vector<int> &nums) {
9 TreeNode *head, tmp;
10 stack<record> st;
12 head = new TreeNode(-1);
13 st.push({&head->right, 0, (int)nums.size()});
14 while (!st.empty()) {
15 auto [root, start, end] = st.top();
16 st.pop();
17 while (start < end) {
18 int index = -1;
19 for (int i = start, maxi = INT_MIN; i < end; i++)
20 if (nums[i] > maxi) {
21 maxi = nums[i];
22 index = i;
23 }
24 *root = new TreeNode(nums[index]);
25 st.push({&(*root)->left, start, index});
26 root = &(*root)->right;
27 start = index + 1;
28 }
29 }
30 return head->right;
31 }
32 };