#include <iostream>
using namespace std;
#include <utility>
#include <string>
#include <vector>
class bintree {
// A binary search tree for locations in Lineland.
// Notes:
// - Assume a flat, one-dimensional world with locations from -180 to 180.
// - All locations and distances are measured in the same units (degrees).
public:
// Default constructor
bintree() {
this->root = NULL;
}
// Copy constructor
bintree(const bintree &t) {
this -> root = NULL;
*this = t;
}
// Destructor
~bintree() {
}
// Copy assignment is implemented using the copy-swap idiom
friend void swap(bintree &t1, bintree &t2) {
using std::swap;
// Swap all data members here, e.g.,
// swap(t1.foo, t2.foo);
// Pointers should be swapped -- but not the things they point to.
}
bintree &operator= (bintree other) {
// You don't need to modify this function.
swap(*this, other);
return *this;
}
void insert(const std::string& name, double p) {
node *n = new node; // create a new node
n->name=name; n->p=p; // intialise the data payload
n->left=n->right=nullptr; // and make it a leaf.
if (root==nullptr) // if tree is empty,
root = n; // add the new node.
else { // else find where to insert it
node* t=root;
while (true) {
if (t->name > n->name) { // go to left
if (t->left==nullptr) {
t->left = n;
break;
}
else t=t->left;
}
else if (t->name == n->name) { // insert between current and next
n->right = t->right;
t->right = n;
break;
}
else { // go to right
if (t->right==nullptr) {
t->right = n;
break;
}
else t=t->right;
}
}
}
}
void within_radius(double p, double r, std::vector<std::string> &result) const {
// Search for elements within the range `p` plus or minus `r`.
// Clears `result` and puts the elements in `result`.
// Postcondition: `result` contains all (and only) elements of the
// tree, in any order, that lie within the range `p` plus or minus
// `r`.
}
private:
struct node
{
node *left;
node *right;
std::string name; // This is the key for your reasearch
double p; // followed by other data
};
node* root;
public:
void print (node *n=nullptr, int o=0) {
if (root==nullptr)
cout << "Empty"<<endl;
else if (n==nullptr && o==0)
print (root, 0);
else if (n==nullptr) {
for (int i=0; i<o; i++) cout<<" ";
cout << "x"<<endl;
}
else {
for (int i=0; i<o; i++) cout<<" ";
cout << n->name << " "<<n->p<<endl;
print (n->left,o+1);
print (n->right,o+1);
}
}
};
int main() {
// your code goes here
bintree b;
b.insert ("B", 1);
b.insert ("A", 2);
b.insert ("C", 3);
b.insert ("D", 4);
b.insert ("C", 5);
b.print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx2ZWN0b3I+CgpjbGFzcyBiaW50cmVlIHsKCi8vIEEgYmluYXJ5IHNlYXJjaCB0cmVlIGZvciBsb2NhdGlvbnMgaW4gTGluZWxhbmQuCgovLyBOb3RlczogCi8vIC0gQXNzdW1lIGEgZmxhdCwgb25lLWRpbWVuc2lvbmFsIHdvcmxkIHdpdGggbG9jYXRpb25zIGZyb20gLTE4MCB0byAxODAuCi8vIC0gQWxsIGxvY2F0aW9ucyBhbmQgZGlzdGFuY2VzIGFyZSBtZWFzdXJlZCBpbiB0aGUgc2FtZSB1bml0cyAoZGVncmVlcykuCgpwdWJsaWM6Ci8vIERlZmF1bHQgY29uc3RydWN0b3IKYmludHJlZSgpIHsKICAgdGhpcy0+cm9vdCA9IE5VTEw7Cn0KCi8vIENvcHkgY29uc3RydWN0b3IKYmludHJlZShjb25zdCBiaW50cmVlICZ0KSB7CiAgdGhpcyAtPiByb290ID0gTlVMTDsKKnRoaXMgPSB0OwogfQoKLy8gRGVzdHJ1Y3Rvcgp+YmludHJlZSgpIHsKCn0KCgogLy8gQ29weSBhc3NpZ25tZW50IGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBjb3B5LXN3YXAgaWRpb20KCiBmcmllbmQgdm9pZCBzd2FwKGJpbnRyZWUgJnQxLCBiaW50cmVlICZ0MikgewogdXNpbmcgc3RkOjpzd2FwOwogLy8gU3dhcCBhbGwgZGF0YSBtZW1iZXJzIGhlcmUsIGUuZy4sCiAvLyBzd2FwKHQxLmZvbywgdDIuZm9vKTsKIC8vIFBvaW50ZXJzIHNob3VsZCBiZSBzd2FwcGVkIC0tIGJ1dCBub3QgdGhlIHRoaW5ncyB0aGV5IHBvaW50IHRvLgogfQogYmludHJlZSAmb3BlcmF0b3I9IChiaW50cmVlIG90aGVyKSB7CiAvLyBZb3UgZG9uJ3QgbmVlZCB0byBtb2RpZnkgdGhpcyBmdW5jdGlvbi4KIHN3YXAoKnRoaXMsIG90aGVyKTsKIHJldHVybiAqdGhpczsKIH0KCnZvaWQgaW5zZXJ0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBkb3VibGUgcCkgewogICBub2RlICpuID0gbmV3IG5vZGU7ICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBub2RlCiAgIG4tPm5hbWU9bmFtZTsgbi0+cD1wOyAgICAgLy8gaW50aWFsaXNlIHRoZSBkYXRhIHBheWxvYWQKICAgbi0+bGVmdD1uLT5yaWdodD1udWxscHRyOyAvLyBhbmQgbWFrZSBpdCBhIGxlYWYuCgogICBpZiAocm9vdD09bnVsbHB0cikgICAgICAgIC8vIGlmIHRyZWUgaXMgZW1wdHksIAogICAgICByb290ID0gbjsgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBuZXcgbm9kZS4gCgogICBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8vIGVsc2UgZmluZCB3aGVyZSB0byBpbnNlcnQgaXQKICAgICAgbm9kZSogdD1yb290OyAKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIGlmICh0LT5uYW1lID4gbi0+bmFtZSkgeyAgICAgLy8gZ28gdG8gbGVmdAogICAgICAgICAgICAgIGlmICh0LT5sZWZ0PT1udWxscHRyKSB7CiAgICAgICAgICAgICAgICAgdC0+bGVmdCA9IG47ICAgICAKICAgICAgICAgICAgICAgICBicmVhazsgIAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIHQ9dC0+bGVmdDsgCiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICh0LT5uYW1lID09IG4tPm5hbWUpIHsgLy8gaW5zZXJ0IGJldHdlZW4gY3VycmVudCBhbmQgbmV4dAogICAgICAgICAgICAgIG4tPnJpZ2h0ID0gdC0+cmlnaHQ7IAogICAgICAgICAgICAgIHQtPnJpZ2h0ID0gbjsgCiAgICAgICAgICAgICAgYnJlYWs7IAogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdvIHRvIHJpZ2h0IAogICAgICAgICAgICAgIGlmICh0LT5yaWdodD09bnVsbHB0cikgewogICAgICAgICAgICAgICAgIHQtPnJpZ2h0ID0gbjsgICAgIAogICAgICAgICAgICAgICAgIGJyZWFrOyAgCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgdD10LT5yaWdodDsgCiAgICAgICAgICB9CiAgICAgICB9CiAgICB9CiB9CiB2b2lkIHdpdGhpbl9yYWRpdXMoZG91YmxlIHAsIGRvdWJsZSByLCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJnJlc3VsdCkgY29uc3QgewogIC8vIFNlYXJjaCBmb3IgZWxlbWVudHMgd2l0aGluIHRoZSByYW5nZSBgcGAgcGx1cyBvciBtaW51cyBgcmAuCiAgLy8gQ2xlYXJzIGByZXN1bHRgIGFuZCBwdXRzIHRoZSBlbGVtZW50cyBpbiBgcmVzdWx0YC4KICAvLyBQb3N0Y29uZGl0aW9uOiBgcmVzdWx0YCBjb250YWlucyBhbGwgKGFuZCBvbmx5KSBlbGVtZW50cyBvZiB0aGUKICAvLyB0cmVlLCBpbiBhbnkgb3JkZXIsIHRoYXQgbGllIHdpdGhpbiB0aGUgcmFuZ2UgYHBgIHBsdXMgb3IgbWludXMKICAvLyBgcmAuCiAgfQoKCnByaXZhdGU6CgogICAgc3RydWN0IG5vZGUKICAgIHsKICAgICBub2RlICpsZWZ0OwogICAgIG5vZGUgKnJpZ2h0OwogICAgIHN0ZDo6c3RyaW5nIG5hbWU7ICAvLyBUaGlzIGlzIHRoZSBrZXkgZm9yIHlvdXIgcmVhc2VhcmNoCiAgICAgZG91YmxlIHA7ICAgICAgICAgIC8vIGZvbGxvd2VkIGJ5IG90aGVyIGRhdGEgCiAgICB9OwoKbm9kZSogcm9vdDsgCgpwdWJsaWM6IAogIHZvaWQgcHJpbnQgKG5vZGUgKm49bnVsbHB0ciwgaW50IG89MCkgewogIAkgIGlmIChyb290PT1udWxscHRyKQogIAkgICAgICBjb3V0IDw8ICJFbXB0eSI8PGVuZGw7IAogIAkgIGVsc2UgaWYgKG49PW51bGxwdHIgJiYgbz09MCkKICAJICAgICBwcmludCAocm9vdCwgMCk7CiAgCSAgZWxzZSBpZiAobj09bnVsbHB0cikgewogIAkgICAgCSAgCSBmb3IgKGludCBpPTA7IGk8bzsgaSsrKSBjb3V0PDwiICI7CiAgCSAgICAgY291dCA8PCAieCI8PGVuZGw7IAogIAkgIH0KICAJICBlbHNlIHsKICAJICAJIGZvciAoaW50IGk9MDsgaTxvOyBpKyspIGNvdXQ8PCIgIjsKICAJICAgICBjb3V0IDw8IG4tPm5hbWUgPDwgIiAiPDxuLT5wPDxlbmRsOyAKICAJICAgICBwcmludCAobi0+bGVmdCxvKzEpOwogIAkgICAgIHByaW50IChuLT5yaWdodCxvKzEpOwogIAkgIH0KICB9Cn07CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWJpbnRyZWUgYjsgCgkKCWIuaW5zZXJ0ICgiQiIsIDEpOwoJYi5pbnNlcnQgKCJBIiwgMik7CgliLmluc2VydCAoIkMiLCAzKTsKCWIuaW5zZXJ0ICgiRCIsIDQpOwoJYi5pbnNlcnQgKCJDIiwgNSk7CgogICAgYi5wcmludCgpOyAKCXJldHVybiAwOwp9