Submission

Status:

[-SSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: useAI

Problemset: composite tree

Language: cpp

Time: 0.002 second

Submitted On: 2026-03-24 23:14:16

#include <bits/stdc++.h>
using namespace std;

struct Node {
    int val;
    Node *l, *r;
    Node(int v) : val(v), l(nullptr), r(nullptr) {}
};

// parse string -> tree
Node* parse(string &s, int &i) {
    if (i >= (int)s.size()) return nullptr;

    // ??????? (?????????????)
    int num = 0;
    while (i < (int)s.size() && isdigit(s[i])) {
        num = num * 10 + (s[i] - '0');
        i++;
    }

    Node* root = new Node(num);

    // left child
    if (i < (int)s.size() && s[i] == '(') {
        i++; // skip '('
        if (s[i] != ')') {
            root->l = parse(s, i);
        }
        if (i < (int)s.size() && s[i] == ')') i++; // skip ')'
    }

    // right child
    if (i < (int)s.size() && s[i] == '(') {
        i++; // skip '('
        if (s[i] != ')') {
            root->r = parse(s, i);
        }
        if (i < (int)s.size() && s[i] == ')') i++; // skip ')'
    }

    return root;
}

// merge tree
Node* mergeTree(Node* a, Node* b) {
    if (!a || !b) return nullptr;

    Node* cur = new Node(a->val + b->val);
    cur->l = mergeTree(a->l, b->l);
    cur->r = mergeTree(a->r, b->r);

    return cur;
}

// print preorder format
void print(Node* root) {
    if (!root) return;

    cout << root->val;

    if (root->l || root->r) {
        cout << "(";
        if (root->l) print(root->l);
        cout << ")(";
        if (root->r) print(root->r);
        cout << ")";
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string s1, s2;
    cin >> s1 >> s2;

    int i = 0, j = 0;
    Node* t1 = parse(s1, i);
    Node* t2 = parse(s2, j);

    Node* res = mergeTree(t1, t2);

    print(res);

    return 0;
}