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;
}