Problem Statement:
Given two BST, print all elements in sorted order
Example:
Input:
/*
* 10
* / \
* 8 12
* / \ / \
* 2 9 11 14
*/
/*
* 10
* / \
* 8 12
* / \ / \
* 2 9 11 14
*/
Output:
2 2 8 8 9 9 10 10 11 11 12 12 14 14
Solution Explanation:
Add both the elements into the vector sort it and print it.
Time Complexity: O(n+m)
Space Complexity: O(n+m)
Code Solution
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
class Tree_Node
{
public:
int data;
Tree_Node* left;
Tree_Node* right;
Tree_Node(int x)
{
data = x;
left = nullptr;
right = nullptr;
}
};
vector<int> res;
void inorderTraversal(Tree_Node* root)
{
if (!root)
return;
inorderTraversal(root->left);
res.push_back(root->data);
inorderTraversal(root->right);
}
void solution(Tree_Node* root1, Tree_Node* root2)
{
inorderTraversal(root1);
inorderTraversal(root2);
}
int main()
{
/*
* 10
* / \
* 8 12
* / \ / \
* 2 9 11 14
*/
Tree_Node* root = new Tree_Node(10);
root->left = new Tree_Node(8);
root->right = new Tree_Node(12);
root->left->left = new Tree_Node(2);
root->left->right = new Tree_Node(9);
root->right->left = new Tree_Node(11);
root->right->right = new Tree_Node(14);
/*
* 10
* / \
* 8 12
* / \ / \
* 2 9 11 14
*/
Tree_Node* root_1 = new Tree_Node(10);
root_1->left = new Tree_Node(8);
root_1->right = new Tree_Node(12);
root_1->left->left = new Tree_Node(2);
root_1->left->right = new Tree_Node(9);
root_1->right->left = new Tree_Node(11);
root_1->right->right = new Tree_Node(14);
solution(root, root_1);
sort(res.begin(), res.end());
for (int i = 0; i < res.size(); i++)
cout << res[i] << " ";
return 0;
}
Output
2 2 8 8 9 9 10 10 11 11 12 12 14 14