#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Node
{
public:
Node(int value): _value(value) {};
Node(Node* parent, int value): _value(value)
{
if (parent != nullptr)
{
parent->_children.push_back(this);
}
};
void Serialize()
{
Serialize(this);
}
private:
int _value;
vector<Node*> _children;
string GetValueAsString()
{
return std::to_string(_value);
}
void Serialize(Node* node)
{
if (node == nullptr) return;
cout << "<Node value=\"" << node->GetValueAsString() << "\">";
if (node->_children.size() > 0)
{
cout << "<Children>";
for(auto* child: node->_children)
{
Serialize(child);
}
cout << "</Children>";
}
cout << "</Node>";
}
};
int main() {
// your code goes here
Node root = Node(1);
root.Serialize();
cout << endl << "------" << endl;
Node leaf1 = Node(&root, 123);
Node leaf2 = Node(&root, 12345);
Node leaf3 = Node(&root, 45);
root.Serialize();
cout << endl << "------" << endl;
Node leaf1_1 = Node(&leaf1, 2);
Node leaf1_2 = Node(&leaf1, 42);
Node leaf3_1 = Node(&leaf3, 69);
Node leaf1_1_1 = Node(&leaf1_1, 3);
root.Serialize();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPiAKI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBOb2RlCnsKcHVibGljOgoJTm9kZShpbnQgdmFsdWUpOiBfdmFsdWUodmFsdWUpIHt9OwoJCglOb2RlKE5vZGUqIHBhcmVudCwgaW50IHZhbHVlKTogX3ZhbHVlKHZhbHVlKQoJewoJCWlmIChwYXJlbnQgIT0gbnVsbHB0cikJCgkJewoJCQlwYXJlbnQtPl9jaGlsZHJlbi5wdXNoX2JhY2sodGhpcyk7CgkJfQoJfTsKCQoJdm9pZCBTZXJpYWxpemUoKSAKCXsKCQlTZXJpYWxpemUodGhpcyk7Cgl9CgkKCQpwcml2YXRlOgoJaW50IF92YWx1ZTsKCXZlY3RvcjxOb2RlKj4gX2NoaWxkcmVuOwoJCglzdHJpbmcgR2V0VmFsdWVBc1N0cmluZygpCgl7IAoJCXJldHVybiBzdGQ6OnRvX3N0cmluZyhfdmFsdWUpOwoJfQoKCXZvaWQgU2VyaWFsaXplKE5vZGUqIG5vZGUpIAoJewogICAgCWlmIChub2RlID09IG51bGxwdHIpIHJldHVybjsKICAgIAljb3V0IDw8ICI8Tm9kZSB2YWx1ZT1cIiIgPDwgbm9kZS0+R2V0VmFsdWVBc1N0cmluZygpIDw8ICJcIj4iOwogICAgCWlmIChub2RlLT5fY2hpbGRyZW4uc2l6ZSgpID4gMCkKICAgIAl7CiAgICAJCWNvdXQgPDwgIjxDaGlsZHJlbj4iOwogICAgCQlmb3IoYXV0byogY2hpbGQ6IG5vZGUtPl9jaGlsZHJlbikgCiAgICAJCXsKICAgIAkgICAgCVNlcmlhbGl6ZShjaGlsZCk7CiAgICAJCX0KICAgIAkJY291dCA8PCAiPC9DaGlsZHJlbj4iOwogICAgCX0KICAgIAljb3V0IDw8ICI8L05vZGU+IjsKCX0KfTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJTm9kZSByb290ID0gTm9kZSgxKTsKCXJvb3QuU2VyaWFsaXplKCk7CgkKCWNvdXQgPDwgZW5kbCA8PCAiLS0tLS0tIiA8PCBlbmRsOwoJCglOb2RlIGxlYWYxID0gTm9kZSgmcm9vdCwgMTIzKTsKCU5vZGUgbGVhZjIgPSBOb2RlKCZyb290LCAxMjM0NSk7CglOb2RlIGxlYWYzID0gTm9kZSgmcm9vdCwgNDUpOwoKCXJvb3QuU2VyaWFsaXplKCk7Cgljb3V0IDw8IGVuZGwgPDwgIi0tLS0tLSIgPDwgZW5kbDsKCQoJTm9kZSBsZWFmMV8xID0gTm9kZSgmbGVhZjEsIDIpOwoJTm9kZSBsZWFmMV8yID0gTm9kZSgmbGVhZjEsIDQyKTsKCQoJTm9kZSBsZWFmM18xID0gTm9kZSgmbGVhZjMsIDY5KTsKCU5vZGUgbGVhZjFfMV8xID0gTm9kZSgmbGVhZjFfMSwgMyk7Cglyb290LlNlcmlhbGl6ZSgpOwp9