Skip to content

Commit e3773e3

Browse files
authored
Create Merge Two BST's To Return BST.cpp
1 parent 2d40482 commit e3773e3

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class Solution {
2+
public:
3+
void inOrder(Node* root, vector<int> &bst){
4+
if(root == NULL) return;
5+
6+
inOrder(root -> left, bst);
7+
bst.push_back(root -> data);
8+
inOrder(root -> right, bst);
9+
}
10+
11+
Node* inorderToBST(int start, int end, vector<int> &merged){
12+
if(start > end) return NULL;
13+
14+
int mid = start + (end - start) / 2;
15+
Node* root = new Node(merged[mid]);
16+
17+
root -> left = inorderToBST(start, mid - 1, merged);
18+
root -> right = inorderToBST(mid + 1, end, merged);
19+
20+
return root;
21+
}
22+
23+
Node* merge(Node *root1, Node *root2) {
24+
vector<int> bst1, bst2;
25+
26+
inOrder(root1, bst1);
27+
inOrder(root2, bst2);
28+
29+
vector<int> merged;
30+
31+
int i = 0;
32+
int j = 0;
33+
while(i < bst1.size() && j < bst2.size()){
34+
if(bst1[i] < bst2[j]){
35+
merged.push_back(bst1[i++]);
36+
}else{
37+
merged.push_back(bst2[j++]);
38+
}
39+
}
40+
41+
while(i < bst1.size()){
42+
merged.push_back(bst1[i++]);
43+
}
44+
45+
while(j < bst2.size()){
46+
merged.push_back(bst2[j++]);
47+
}
48+
49+
return inorderToBST(0, merged.size()-1, merged);
50+
}
51+
};

0 commit comments

Comments
 (0)