- #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==