#include <string>
#include <iostream>
using namespace std;
struct Book {
string name;
};
struct TreeNode {
float key;
Book book;
TreeNode* leftPtr;
TreeNode* rightPtr;
};
class MyTree {
TreeNode* rootPtr;
// this function crashes!
TreeNode* makeNode(float key,string bookName) {
TreeNode* newNode = new TreeNode;
if (newNode == NULL) {
cout << "Error: No more space";
}
else {
newNode->key = key;
cout << newNode->book.name << endl;
newNode->book.name = bookName;// CRASHES HERE
cout << "Name: " << newNode->book.name;
newNode->leftPtr = NULL;
newNode->rightPtr = NULL;
}
return newNode;
}
TreeNode* insert(TreeNode* nodePtr, float key, string bookName) {
if (nodePtr == NULL) {
nodePtr = makeNode(key, bookName);
}
else if (key < nodePtr->key) {
nodePtr->leftPtr = insert(nodePtr->leftPtr, key, bookName);
}
else if (key > nodePtr->key) {
nodePtr->rightPtr = insert(nodePtr->rightPtr, key, bookName);
}
else { cout << "Error: Key already exist. Cannot add node."; }
return nodePtr;
}
public:
MyTree() { rootPtr = NULL; }
void addNode() {
// ask for input
float key = 0; string bookName = "default";
cout << "Enter a value for the key: ";
cin >> key;
cout << "Enter the name for the book: ";
cin >> bookName;
// insert
rootPtr = insert(rootPtr, key, bookName);
}
};
int main() {
MyTree a;
a.addNode();
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEJvb2sgewogICAgc3RyaW5nIG5hbWU7Cn07CgpzdHJ1Y3QgVHJlZU5vZGUgewogICAgZmxvYXQga2V5OwogICAgQm9vayBib29rOwogICAgVHJlZU5vZGUqIGxlZnRQdHI7CiAgICBUcmVlTm9kZSogcmlnaHRQdHI7Cn07CmNsYXNzIE15VHJlZSB7CiAgICBUcmVlTm9kZSogcm9vdFB0cjsKICAgIC8vIHRoaXMgZnVuY3Rpb24gY3Jhc2hlcyEKICAgIFRyZWVOb2RlKiBtYWtlTm9kZShmbG9hdCBrZXksc3RyaW5nIGJvb2tOYW1lKSB7CiAgICAgICAgVHJlZU5vZGUqIG5ld05vZGUgPSBuZXcgVHJlZU5vZGU7CiAgICAgICAgaWYgKG5ld05vZGUgPT0gTlVMTCkgewogICAgICAgICAgICBjb3V0IDw8ICJFcnJvcjogTm8gbW9yZSBzcGFjZSI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXdOb2RlLT5rZXkgPSBrZXk7CiAgICAgICAgICAgIGNvdXQgPDwgbmV3Tm9kZS0+Ym9vay5uYW1lIDw8IGVuZGw7CiAgICAgICAgICAgIG5ld05vZGUtPmJvb2submFtZSA9IGJvb2tOYW1lOy8vIENSQVNIRVMgSEVSRQogICAgICAgICAgICBjb3V0IDw8ICJOYW1lOiAiIDw8IG5ld05vZGUtPmJvb2submFtZTsKICAgICAgICAgICAgbmV3Tm9kZS0+bGVmdFB0ciA9IE5VTEw7CiAgICAgICAgICAgIG5ld05vZGUtPnJpZ2h0UHRyID0gTlVMTDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld05vZGU7CiAgICB9CiAgICBUcmVlTm9kZSogaW5zZXJ0KFRyZWVOb2RlKiBub2RlUHRyLCBmbG9hdCBrZXksIHN0cmluZyBib29rTmFtZSkgewogICAgICAgIGlmIChub2RlUHRyID09IE5VTEwpIHsKICAgICAgICAgICAgbm9kZVB0ciA9IG1ha2VOb2RlKGtleSwgYm9va05hbWUpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChrZXkgPCBub2RlUHRyLT5rZXkpIHsKICAgICAgICAgICAgbm9kZVB0ci0+bGVmdFB0ciA9IGluc2VydChub2RlUHRyLT5sZWZ0UHRyLCBrZXksIGJvb2tOYW1lKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoa2V5ID4gbm9kZVB0ci0+a2V5KSB7CiAgICAgICAgICAgIG5vZGVQdHItPnJpZ2h0UHRyID0gaW5zZXJ0KG5vZGVQdHItPnJpZ2h0UHRyLCBrZXksIGJvb2tOYW1lKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7IGNvdXQgPDwgIkVycm9yOiBLZXkgYWxyZWFkeSBleGlzdC4gQ2Fubm90IGFkZCBub2RlLiI7IH0KICAgICAgICByZXR1cm4gbm9kZVB0cjsKICAgIH0KcHVibGljOgogICAgTXlUcmVlKCkgeyByb290UHRyID0gTlVMTDsgfQogICAgdm9pZCBhZGROb2RlKCkgewogICAgICAgIC8vIGFzayBmb3IgaW5wdXQKICAgICAgICBmbG9hdCBrZXkgPSAwOyBzdHJpbmcgYm9va05hbWUgPSAiZGVmYXVsdCI7CiAgICAgICAgY291dCA8PCAiRW50ZXIgYSB2YWx1ZSBmb3IgdGhlIGtleTogIjsKICAgICAgICBjaW4gPj4ga2V5OwogICAgICAgIGNvdXQgPDwgIkVudGVyIHRoZSBuYW1lIGZvciB0aGUgYm9vazogIjsKICAgICAgICBjaW4gPj4gYm9va05hbWU7CgogICAgICAgIC8vIGluc2VydAogICAgICAgIHJvb3RQdHIgPSBpbnNlcnQocm9vdFB0ciwga2V5LCBib29rTmFtZSk7CiAgICB9Cn07CmludCBtYWluKCkgewogICAgTXlUcmVlIGE7CiAgICBhLmFkZE5vZGUoKTsKfQ==