CCCPaste

Untitled

class Solution
{
    public:
    //Function to return a list of integers denoting the node
    //values of both the BST in a sorted order.
    vector v1, v2;
    void dfs(Node *root, int t) {
        if(!root) {
            return;
        }
        dfs(root->left, t);
        if(t == 1) {
            v1.push_back(root->data);
        }
        else {
            v2.push_back(root->data);
        }
        dfs(root->right, t);
    }
    vector merge(Node *root1, Node *root2)
    {
        dfs(root1, 1);
        dfs(root2, 2);
        
        vector v;
        int i = 0,  j = 0;
        while(i < (int) v1.size() and j < (int) v2.size()) {
            if(v1[i] < v2[j]) {
                v.push_back(v1[i]);
                i++;
            }
            else if(v1[i] > v2[j]) {
                v.push_back(v2[j]);
                j++;
            }
            else {
                v.push_back(v1[i]);
                v.push_back(v1[i]);
                i++;
                j++;
            }
        }
        while(i < (int) v1.size()) {
            v.push_back(v1[i]);
            i++;
        }
        while(j < (int) v2.size()) {
            v.push_back(v2[j]);
            j++;
        }
        return v;
    }
};