#include <iostream>
using namespace std;
struct Node {
int data;
Node *left;
Node *right;
Node(int data) {
this->data = data;
left = NULL;
right = NULL;
}
~Node() {
delete left;
delete right;
}
};
class BinaryTree {
public:
BinaryTree() { root = NULL; }
~BinaryTree();
bool insert(int inserted);
Node* get_root() const { return root; }
private:
Node* root;
};
BinaryTree::~BinaryTree() {
delete root;
}
bool BinaryTree::insert(int inserted) {
if(!root) {
root = new Node(inserted);
return true;
}
else {
Node *temp = root;
while(temp) {
if(inserted > temp->data) {
if(temp->right)
temp = temp->right;
else {
temp->right = new Node(inserted);
return true;
}
} else if(inserted < temp->data) {
if(temp->left)
temp = temp->left;
else {
temp->left = new Node(inserted);
return true;
}
} else
return false;
}
}
return false;
}
int main(){
BinaryTree tree;
bool success = tree.insert(4);
if(success) {
cout << tree.get_root()->data << endl;
}
success = tree.insert(5); // Check the val
success = tree.insert(2); // Check the val
//etc.
//inorder( root );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBOb2RlIHsKICBpbnQgZGF0YTsKICBOb2RlICpsZWZ0OwogIE5vZGUgKnJpZ2h0OwogIE5vZGUoaW50IGRhdGEpIHsKICAgIHRoaXMtPmRhdGEgPSBkYXRhOwogICAgbGVmdCA9IE5VTEw7CiAgICByaWdodCA9IE5VTEw7CiAgfQogIH5Ob2RlKCkgewogIAlkZWxldGUgbGVmdDsKICAJZGVsZXRlIHJpZ2h0OwogIH0KfTsKCmNsYXNzIEJpbmFyeVRyZWUgewogIHB1YmxpYzoKCUJpbmFyeVRyZWUoKSB7IHJvb3QgPSBOVUxMOyB9Cgl+QmluYXJ5VHJlZSgpOwogICAgYm9vbCBpbnNlcnQoaW50IGluc2VydGVkKTsKICAgIE5vZGUqIGdldF9yb290KCkgY29uc3QgeyByZXR1cm4gcm9vdDsgfQogIHByaXZhdGU6CiAgCU5vZGUqIHJvb3Q7CiAgCn07CgpCaW5hcnlUcmVlOjp+QmluYXJ5VHJlZSgpIHsKCWRlbGV0ZSByb290Owp9Cgpib29sIEJpbmFyeVRyZWU6Omluc2VydChpbnQgaW5zZXJ0ZWQpIHsKCQoJaWYoIXJvb3QpIHsKCQlyb290ID0gbmV3IE5vZGUoaW5zZXJ0ZWQpOwoJCXJldHVybiB0cnVlOwoJfQoJZWxzZSB7CgkJTm9kZSAqdGVtcCA9IHJvb3Q7CgoJCXdoaWxlKHRlbXApIHsKCQkJaWYoaW5zZXJ0ZWQgPiB0ZW1wLT5kYXRhKSB7CgkJCQlpZih0ZW1wLT5yaWdodCkKCQkJCQl0ZW1wID0gdGVtcC0+cmlnaHQ7CgkJCQllbHNlIHsKCQkJCQl0ZW1wLT5yaWdodCA9IG5ldyBOb2RlKGluc2VydGVkKTsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJfSBlbHNlIGlmKGluc2VydGVkIDwgdGVtcC0+ZGF0YSkgewoJCQkJaWYodGVtcC0+bGVmdCkgCgkJCQkJdGVtcCA9IHRlbXAtPmxlZnQ7CgkJCQllbHNlIHsKCQkJCQl0ZW1wLT5sZWZ0ID0gbmV3IE5vZGUoaW5zZXJ0ZWQpOwoJCQkJCXJldHVybiB0cnVlOwoJCQkJfQoJCQl9IGVsc2UKCQkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CglyZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCl7CgoJQmluYXJ5VHJlZSB0cmVlOwogICAgYm9vbCBzdWNjZXNzID0gdHJlZS5pbnNlcnQoNCk7CiAgICBpZihzdWNjZXNzKSB7CiAgICAgIGNvdXQgPDwgdHJlZS5nZXRfcm9vdCgpLT5kYXRhIDw8IGVuZGw7Cgl9CiAgICBzdWNjZXNzID0gdHJlZS5pbnNlcnQoNSk7IC8vIENoZWNrIHRoZSB2YWwKICAgIAogICAgc3VjY2VzcyA9IHRyZWUuaW5zZXJ0KDIpOyAvLyBDaGVjayB0aGUgdmFsCiAgICAKICAgIC8vZXRjLgoJCiAgICAvL2lub3JkZXIoIHJvb3QgKTsKCglyZXR1cm4gMDsKCn0=