#include <iostream>
using namespace std;
struct node
{
public:
int value;
node * left;
node * right;
};
class bTree
{
public:
node * root;
public:
bTree();
void insert(node *& r, int val);
void insert(int val);
void traversePreorder();
void traversePreorder(node * r);
};
bTree::bTree()
{
root = NULL;
}
void bTree::insert(node *& r, int val)
{
if (r == NULL)
{
r = new node();
r->value = val;
r->left = NULL;
r->right = NULL;
return;
}
else
{
if (val <= r->value)
{
insert(r->left, val);
}
else
{
insert(r->right, val);
}
}
}
void bTree::insert(int val)
{
insert(root, val);
}
void bTree::traversePreorder(node * r)
{
if (r == nullptr)
{
return;
}
else
{
cout << r->value << " ";
traversePreorder(r->left);
traversePreorder(r->right);
}
}
void bTree::traversePreorder()
{
traversePreorder(root);
}
int main()
{
bTree * myTree = new bTree();
myTree->insert(30);
myTree->insert(40);
myTree->insert(20);
myTree->insert(10);
myTree->insert(50);
myTree->traversePreorder();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgpzdHJ1Y3Qgbm9kZQp7CnB1YmxpYzoKICAgIGludCB2YWx1ZTsKICAgIG5vZGUgKiBsZWZ0OwogICAgbm9kZSAqIHJpZ2h0Owp9OwoKCmNsYXNzIGJUcmVlCnsKcHVibGljOgogICAgbm9kZSAqIHJvb3Q7CgpwdWJsaWM6CiAgICBiVHJlZSgpOwogICAgdm9pZCBpbnNlcnQobm9kZSAqJiByLCBpbnQgdmFsKTsKICAgIHZvaWQgaW5zZXJ0KGludCB2YWwpOwogICAgdm9pZCB0cmF2ZXJzZVByZW9yZGVyKCk7CiAgICB2b2lkIHRyYXZlcnNlUHJlb3JkZXIobm9kZSAqIHIpOwoKCn07CgpiVHJlZTo6YlRyZWUoKQp7CiAgICByb290ID0gTlVMTDsKfQoKdm9pZCBiVHJlZTo6aW5zZXJ0KG5vZGUgKiYgciwgaW50IHZhbCkKewogICAgaWYgKHIgPT0gTlVMTCkKICAgIHsKICAgICAgICByID0gbmV3IG5vZGUoKTsKICAgICAgICByLT52YWx1ZSA9IHZhbDsKICAgICAgICByLT5sZWZ0ID0gTlVMTDsKICAgICAgICByLT5yaWdodCA9IE5VTEw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGlmICh2YWwgPD0gci0+dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBpbnNlcnQoci0+bGVmdCwgdmFsKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaW5zZXJ0KHItPnJpZ2h0LCB2YWwpOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBiVHJlZTo6aW5zZXJ0KGludCB2YWwpCnsKICAgIGluc2VydChyb290LCB2YWwpOwp9Cgp2b2lkIGJUcmVlOjp0cmF2ZXJzZVByZW9yZGVyKG5vZGUgKiByKQp7CiAgICBpZiAociA9PSBudWxscHRyKSAKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgY291dCA8PCByLT52YWx1ZSA8PCAiICI7CiAgICAgICAgdHJhdmVyc2VQcmVvcmRlcihyLT5sZWZ0KTsKICAgICAgICB0cmF2ZXJzZVByZW9yZGVyKHItPnJpZ2h0KTsKICAgIH0KfQoKdm9pZCBiVHJlZTo6dHJhdmVyc2VQcmVvcmRlcigpCnsKICAgIHRyYXZlcnNlUHJlb3JkZXIocm9vdCk7Cn0KCmludCBtYWluKCkKewogICAgYlRyZWUgKiBteVRyZWUgPSBuZXcgYlRyZWUoKTsKCiAgICBteVRyZWUtPmluc2VydCgzMCk7CgogICAgbXlUcmVlLT5pbnNlcnQoNDApOwogICAgbXlUcmVlLT5pbnNlcnQoMjApOwogICAgbXlUcmVlLT5pbnNlcnQoMTApOwogICAgbXlUcmVlLT5pbnNlcnQoNTApOwoKCiAgICBteVRyZWUtPnRyYXZlcnNlUHJlb3JkZXIoKTsKCiAgICByZXR1cm4gMDsKfQ==