#include <iostream>
#include <vector>
using namespace std;
struct Node
{
int val;
Node* left;
Node* right;
Node(int v)
{
val = v;
left = right = nullptr;
}
};
class Tree
{
Node* root;
Tree()
{
root = nullptr;
}
public:
static void insert(int x, Node*& node)
{
if (node == nullptr)
{
node = new Node(x);
}
else
{
if (x < node->val)
insert(x, node->left);
else
insert(x, node->right);
}
}
static Tree* populateTree(vector<string> dataVec)
{
Tree* t= new Tree();
for (int i = 0; i < dataVec.size(); i++)
{
insert(stoi(dataVec[i]), t->root);
}
return t;
}
static void printTree(Node* node, string s)
{
if(node == nullptr) return;
cout<<s<< "+"<<node->val <<endl;
s += "----";
printTree(node->left,s);
printTree(node->right, s);
}
static void printTree(Tree* t)
{
if(t)
{
printTree(t->root, "");
}
}
};
int main() {
Tree* t = Tree::populateTree({"70", "2", "7", "20", "41", "28", "20", "51", "91"});
Tree::printTree(t);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5vZGUKewoJaW50IHZhbDsKCU5vZGUqIGxlZnQ7CglOb2RlKiByaWdodDsKCQoJTm9kZShpbnQgdikKCXsKCQl2YWwgPSB2OwoJCWxlZnQgPSByaWdodCA9IG51bGxwdHI7Cgl9Cn07CgoKY2xhc3MgVHJlZQp7CglOb2RlKiByb290OwoJCglUcmVlKCkKCXsKCQlyb290ID0gbnVsbHB0cjsKCX0KCQoJcHVibGljOgoJCglzdGF0aWMgdm9pZCBpbnNlcnQoaW50IHgsIE5vZGUqJiBub2RlKQoJewoJICAgIGlmIChub2RlID09IG51bGxwdHIpCgkJewoJICAgICAgICBub2RlID0gbmV3IE5vZGUoeCk7CgkJfQoJCWVsc2UKCQl7CgkJICAgIGlmICh4IDwgbm9kZS0+dmFsKQoJCSAgICAgICAgaW5zZXJ0KHgsIG5vZGUtPmxlZnQpOwoJCSAgICBlbHNlCgkJICAgICAgICBpbnNlcnQoeCwgbm9kZS0+cmlnaHQpOwoJCX0KCX0KCglzdGF0aWMgVHJlZSogcG9wdWxhdGVUcmVlKHZlY3RvcjxzdHJpbmc+IGRhdGFWZWMpCgl7CgkJVHJlZSogdD0gbmV3IFRyZWUoKTsKCSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGFWZWMuc2l6ZSgpOyBpKyspCgkgICAgewoJICAgICAgICBpbnNlcnQoc3RvaShkYXRhVmVjW2ldKSwgdC0+cm9vdCk7CgkgICAgfQoJICAgIHJldHVybiB0OwoJfQoJCglzdGF0aWMgdm9pZCBwcmludFRyZWUoTm9kZSogbm9kZSwgc3RyaW5nIHMpCgl7CgkJaWYobm9kZSA9PSBudWxscHRyKSByZXR1cm47CgkJY291dDw8czw8ICIrIjw8bm9kZS0+dmFsIDw8ZW5kbDsKCQlzICs9ICItLS0tIjsKCQlwcmludFRyZWUobm9kZS0+bGVmdCxzKTsKCQlwcmludFRyZWUobm9kZS0+cmlnaHQsIHMpOwoJfQoJCglzdGF0aWMgdm9pZCBwcmludFRyZWUoVHJlZSogdCkKCXsKCQlpZih0KQoJCXsKCQkJcHJpbnRUcmVlKHQtPnJvb3QsICIiKTsKCQl9Cgl9Cn07CgppbnQgbWFpbigpIHsKCVRyZWUqIHQgPSBUcmVlOjpwb3B1bGF0ZVRyZWUoeyI3MCIsICIyIiwgIjciLCAiMjAiLCAiNDEiLCAiMjgiLCAiMjAiLCAiNTEiLCAiOTEifSk7CglUcmVlOjpwcmludFRyZWUodCk7CglyZXR1cm4gMDsKfQ==