#include <iostream>
#include <vector>
class BaseNode {
private:
std::vector<BaseNode*> children;
public:
BaseNode() {}
std::vector<BaseNode*> getChildren() {
return children;
}
void addChild(BaseNode * node) {
children.push_back(node);
}
virtual void print()
{
puts("BaseNode");
}
virtual ~BaseNode() {}
};
class TestNode : public BaseNode {
public:
int test1 = 5;
float test2 = 1.23f;
virtual void print()
{
printf("%i, %f\n", test1, test2);
}
};
BaseNode nodeTree = BaseNode();
TestNode node1 = TestNode();
TestNode node2 = TestNode();
TestNode node3 = TestNode();
void renderNode(BaseNode * node)
{
node->print();
for (auto child : node->getChildren()) {
renderNode(child);
}
}
int main() {
node1.addChild(&node2);
nodeTree.addChild(&node1);
nodeTree.addChild(&node3);
renderNode(&nodeTree);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgQmFzZU5vZGUgewogICAgcHJpdmF0ZToKICAgICAgICBzdGQ6OnZlY3RvcjxCYXNlTm9kZSo+IGNoaWxkcmVuOwogICAgcHVibGljOgoKICAgICAgICBCYXNlTm9kZSgpIHt9CgogICAgICAgIHN0ZDo6dmVjdG9yPEJhc2VOb2RlKj4gZ2V0Q2hpbGRyZW4oKSB7CiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjsKICAgICAgICB9CgogICAgICAgIHZvaWQgYWRkQ2hpbGQoQmFzZU5vZGUgKiBub2RlKSB7CiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2hfYmFjayhub2RlKTsKICAgICAgICB9CgogICAgICAgIHZpcnR1YWwgdm9pZCBwcmludCgpCiAgICAgICAgewogICAgICAgICAgICBwdXRzKCJCYXNlTm9kZSIpOwogICAgICAgIH0KCiAgICAgICAgdmlydHVhbCB+QmFzZU5vZGUoKSB7fQp9OwoKY2xhc3MgVGVzdE5vZGUgOiBwdWJsaWMgQmFzZU5vZGUgewogICAgcHVibGljOgoKICAgICAgICBpbnQgdGVzdDEgPSA1OwogICAgICAgIGZsb2F0IHRlc3QyID0gMS4yM2Y7CgogICAgICAgIHZpcnR1YWwgdm9pZCBwcmludCgpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIiVpLCAlZlxuIiwgdGVzdDEsIHRlc3QyKTsKICAgICAgICB9Cn07CgpCYXNlTm9kZSBub2RlVHJlZSA9IEJhc2VOb2RlKCk7ClRlc3ROb2RlIG5vZGUxID0gVGVzdE5vZGUoKTsKVGVzdE5vZGUgbm9kZTIgPSBUZXN0Tm9kZSgpOwpUZXN0Tm9kZSBub2RlMyA9IFRlc3ROb2RlKCk7Cgp2b2lkIHJlbmRlck5vZGUoQmFzZU5vZGUgKiBub2RlKQp7CiAgICBub2RlLT5wcmludCgpOwoKICAgIGZvciAoYXV0byBjaGlsZCA6IG5vZGUtPmdldENoaWxkcmVuKCkpIHsKICAgICAgICByZW5kZXJOb2RlKGNoaWxkKTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBub2RlMS5hZGRDaGlsZCgmbm9kZTIpOwogICAgbm9kZVRyZWUuYWRkQ2hpbGQoJm5vZGUxKTsKICAgIG5vZGVUcmVlLmFkZENoaWxkKCZub2RlMyk7CiAgICByZW5kZXJOb2RlKCZub2RlVHJlZSk7CiAgICByZXR1cm4gMDsKfQo=