#include <iostream>
using namespace std;
struct node {
string code;
node *left, *right;
};
class BST {
node *root=nullptr;
public:
void Insert(node *&start, string key);
void Insert(string key);
void show(node *start=nullptr, int level=0, string t="") {
if (start) {
if (start->left)
show (start->left, level+1, "L:");
else cout << string((level+1)*2,' ') <<"LX"<<endl;
cout << string(level*2,' ') <<t << start->code <<endl;
if (start->right)
show (start->right, level+1, "R:");
else cout << string((level+1)*2,' ') <<"RX"<<endl;
}
else show(root);
}
};
void BST::Insert(node *&start, string key){
if (start == NULL) {
start = new node;
start->code = key;
start->left = start->right = NULL;
printf("Inserting Morse Code -> %s\n",key.c_str());
}
else if (start->code<key)
Insert (start->left, key);
else if (start->code>key)
Insert (start->right, key);
else cout<<"Duplicate"<<endl;
}
void BST::Insert(string key) {
Insert(root, key);
/*
node **start = &root;
if (*start != NULL) {
if (start->code<key)
for(int i = 0; i < key.length(); i++) {
if (key[i] == '.') {
start = &((*start)->left);
} else if (key[i] == '-') {
start = &((*start)->right);
}else {
break;
}
Insert(*start, key);
}
} else {
Insert(root, key);
}*/
}
int main() {
BST b;
b.Insert(".-");
b.Insert("-...");
b.Insert("-.-.");
b.Insert(".");
b.show();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGUgewogICAgc3RyaW5nIGNvZGU7IAogICAgbm9kZSAqbGVmdCwgKnJpZ2h0OyAKfTsKY2xhc3MgQlNUIHsKCW5vZGUgKnJvb3Q9bnVsbHB0cjsgCnB1YmxpYzogCgl2b2lkIEluc2VydChub2RlIComc3RhcnQsIHN0cmluZyBrZXkpOyAKCXZvaWQgSW5zZXJ0KHN0cmluZyBrZXkpOwoJdm9pZCBzaG93KG5vZGUgKnN0YXJ0PW51bGxwdHIsIGludCBsZXZlbD0wLCBzdHJpbmcgdD0iIikgewoJCWlmIChzdGFydCkgewoJCQlpZiAoc3RhcnQtPmxlZnQpCgkJICAgIAlzaG93IChzdGFydC0+bGVmdCwgbGV2ZWwrMSwgIkw6Iik7IAoJCSAgICBlbHNlIGNvdXQgPDwgc3RyaW5nKChsZXZlbCsxKSoyLCcgJykgPDwiTFgiPDxlbmRsOwoJCSAgICBjb3V0IDw8IHN0cmluZyhsZXZlbCoyLCcgJykgPDx0IDw8IHN0YXJ0LT5jb2RlIDw8ZW5kbDsgCgkJICAgIGlmIChzdGFydC0+cmlnaHQpIAoJCSAgICAJc2hvdyAoc3RhcnQtPnJpZ2h0LCBsZXZlbCsxLCAiUjoiKTsKCQkgICAgZWxzZSBjb3V0IDw8IHN0cmluZygobGV2ZWwrMSkqMiwnICcpIDw8IlJYIjw8ZW5kbDsKCQl9CiAgICAgICAgZWxzZSBzaG93KHJvb3QpOwoJfQp9OwoKdm9pZCBCU1Q6Okluc2VydChub2RlIComc3RhcnQsIHN0cmluZyBrZXkpewogICAgaWYgKHN0YXJ0ID09IE5VTEwpIHsKICAgICAgICBzdGFydCA9IG5ldyBub2RlOwogICAgICAgIHN0YXJ0LT5jb2RlID0ga2V5OwogICAgICAgIHN0YXJ0LT5sZWZ0ID0gc3RhcnQtPnJpZ2h0ID0gTlVMTDsKICAgICAgICBwcmludGYoIkluc2VydGluZyBNb3JzZSBDb2RlIC0+ICVzXG4iLGtleS5jX3N0cigpKTsKICAgIH0KICAgIGVsc2UgaWYgKHN0YXJ0LT5jb2RlPGtleSkKICAgICAgICBJbnNlcnQgKHN0YXJ0LT5sZWZ0LCBrZXkpOyAKICAgIGVsc2UgaWYgKHN0YXJ0LT5jb2RlPmtleSkgCiAgICAgICAgSW5zZXJ0IChzdGFydC0+cmlnaHQsIGtleSk7IAogICAgZWxzZSBjb3V0PDwiRHVwbGljYXRlIjw8ZW5kbDsKfQoKdm9pZCBCU1Q6Okluc2VydChzdHJpbmcga2V5KSB7CglJbnNlcnQocm9vdCwga2V5KTsgCgkvKgogICAgbm9kZSAqKnN0YXJ0ID0gJnJvb3Q7CiAgICBpZiAoKnN0YXJ0ICE9IE5VTEwpIHsKICAgIAlpZiAoc3RhcnQtPmNvZGU8a2V5KQogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBrZXkubGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICBpZiAoa2V5W2ldID09ICcuJykgewogICAgICAgICAgICAgICAgc3RhcnQgPSAmKCgqc3RhcnQpLT5sZWZ0KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlbaV0gPT0gJy0nKSB7CiAgICAgICAgICAgICAgICAgc3RhcnQgPSAmKCgqc3RhcnQpLT5yaWdodCk7CiAgICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgCUluc2VydCgqc3RhcnQsIGtleSk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBJbnNlcnQocm9vdCwga2V5KTsKICAgIH0qLwp9CgppbnQgbWFpbigpIHsKCUJTVCBiOwoJYi5JbnNlcnQoIi4tIik7CgliLkluc2VydCgiLS4uLiIpOwoJYi5JbnNlcnQoIi0uLS4iKTsKCWIuSW5zZXJ0KCIuIik7CgliLnNob3coKTsKCXJldHVybiAwOwp9