Submission
Status:
[PPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: goine
Problemset: composite tree
Language: cpp
Time: 0.002 second
Submitted On: 2025-10-12 13:02:31
#include <iostream>
#include <string>
using namespace std;
struct Node {
int data;
Node* left;
Node* right;
Node(int val) : data(val), left(nullptr), right(nullptr) {}
};
Node* createTree(const string& s, int& i) {
if (i >= s.size() || s[i] == ')') return nullptr;
int sign = 1;
if (s[i] == '-') {
sign = -1;
i++;
}
int val = 0;
while (i < s.size() && isdigit(s[i])) {
val = val * 10 + (s[i] - '0');
i++;
}
val *= sign;
Node* node = new Node(val);
if (i < s.size() && s[i] == '(') {
i++;
node->left = createTree(s, i);
if (i < s.size() && s[i] == ')') i++;
}
if (i < s.size() && s[i] == '(') {
i++;
node->right = createTree(s, i);
if (i < s.size() && s[i] == ')') i++;
}
return node;
}
Node* getSum(Node* a, Node* b) {
if (!a || !b) return nullptr;
int val = a->data + b->data;
Node* node = new Node(val);
node->left = getSum(a->left, b->left);
node->right = getSum(a->right, b->right);
return node;
}
string treeToString(Node* root) {
if (!root) return "";
string s = to_string(root->data);
s += "(" + treeToString(root->left) + ")";
s += "(" + treeToString(root->right) + ")";
return s;
}
int main() {
string x, y;
cin >> x >> y;
int idx_x = 0, idx_y = 0;
Node* x_root = createTree(x, idx_x);
Node* y_root = createTree(y, idx_y);
Node* sum_root = getSum(x_root, y_root);
cout << treeToString(sum_root) << endl;
return 0;
}