Submission

Status:

[-SSSSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: goine

Problemset: laracroft

Language: cpp

Time: 0.002 second

Submitted On: 2025-10-12 13:02:14

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