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), right(right) {}
10
+ * };
11
+ */
12
+
13
+ // O(N^2) time complexity
14
+ class Solution {
15
+ public:
16
+ TreeNode* constructMaximumBinaryTree (vector<int >& nums) {
17
+
18
+
19
+ return helper (nums, 0 , nums.size ()-1 );
20
+
21
+
22
+ }
23
+
24
+
25
+ TreeNode* helper (vector<int > &nums, int left, int right )
26
+ {
27
+ if (left>right)return NULL ;
28
+
29
+ int max_index = left;
30
+ for (int i = left; i<=right; i++){
31
+ if (nums[i] > nums[max_index])max_index = i;
32
+ }
33
+
34
+ TreeNode* root = new TreeNode (nums[max_index]);
35
+ root->left = helper (nums, left, max_index - 1 );
36
+ root->right = helper (nums, max_index + 1 , right);
37
+ return root;
38
+ }
39
+
40
+
41
+ };
42
+
43
+ // ======================================O(N) solution using stack
44
+
45
+ /* *
46
+ * Definition for a binary tree node.
47
+ * struct TreeNode {
48
+ * int val;
49
+ * TreeNode *left;
50
+ * TreeNode *right;
51
+ * TreeNode() : val(0), left(nullptr), right(nullptr) {}
52
+ * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
53
+ * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
54
+ * };
55
+ */
56
+ class Solution {
57
+ public:
58
+ TreeNode* constructMaximumBinaryTree (vector<int >& nums) {
59
+
60
+
61
+ stack<TreeNode*> s;
62
+ for (int num:nums)
63
+ {
64
+ TreeNode* curr=new TreeNode (num);
65
+
66
+ while (!s.empty ()&& s.top ()->val <curr->val )
67
+ {
68
+ curr->left =s.top ();
69
+ s.pop ();
70
+ }
71
+
72
+ if (!s.empty ())
73
+ s.top ()->right =curr;
74
+
75
+ s.push (curr);
76
+ }
77
+
78
+ while (s.size ()>1 )
79
+ s.pop ();
80
+
81
+ return s.top ();
82
+
83
+
84
+ }
85
+
86
+
87
+
88
+
89
+ };
0 commit comments