File tree 1 file changed +31
-0
lines changed
1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Time: O(n)
2
+ // Space: O(n)
3
+
4
+ /* *
5
+ * Definition for a binary tree node.
6
+ * struct TreeNode {
7
+ * int val;
8
+ * TreeNode *left;
9
+ * TreeNode *right;
10
+ * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
11
+ * };
12
+ */
13
+ class Solution {
14
+ public:
15
+ TreeNode* constructMaximumBinaryTree (vector<int >& nums) {
16
+ // https://github.com/kamyu104/LintCode/blob/master/C++/max-tree.cpp
17
+ vector<TreeNode *> nodeStack;
18
+ for (int i = 0 ; i < nums.size (); ++i) {
19
+ auto node = new TreeNode (nums[i]);
20
+ while (!nodeStack.empty () && nums[i] > nodeStack.back ()->val ) {
21
+ node->left = nodeStack.back ();
22
+ nodeStack.pop_back ();
23
+ }
24
+ if (!nodeStack.empty ()) {
25
+ nodeStack.back ()->right = node;
26
+ }
27
+ nodeStack.emplace_back (node);
28
+ }
29
+ return nodeStack.front ();
30
+ }
31
+ };
You can’t perform that action at this time.
0 commit comments