#include <iostream>
using namespace std;
class Tree {
public:
Tree();
Tree(int data);
~Tree();
void add(int data);
int getData();
int maximumElement();
int minimumElement();
void printMaximumElements();
void printMinimumElements();
protected:
private:
int data;
Tree *right;
Tree *left;
};
Tree::Tree() : data(0),
right(NULL),
left(NULL) {
}
Tree::Tree(int data) : data(data),
right(NULL),
left(NULL) {
}
Tree::~Tree() {
if (this->right) {
delete this->right;
}
if (this->left) {
delete this->left;
}
}
void Tree::add(int data) {
if (this->data > data) {
if (!this->left) {
cout << "n< ";
this->left = new Tree;
this->left->data = data;
return;
}
cout << "<";
this->left->add(data);
return;
} else {
if (!this->right) {
cout << "n> ";
this->right = new Tree;
this->right->data = data;
return;
}
cout << ">";
this->right->add(data);
return;
}
cout << "Error! Something went wrong in Tree" << endl;
}
int Tree::getData() {
return this->data;
}
int Tree::maximumElement() {
return (this->right)?this->right->maximumElement():this->data;
}
int Tree::minimumElement() {
return (this->left)?this->left->minimumElement():this->data;
}
void Tree::printMaximumElements() {
cout << this->data << " -> ";
if (this->right) {
this->right->printMaximumElements();
}
}
void Tree::printMinimumElements() {
cout << this->data << " -> ";
if (this->left) {
this->left->printMinimumElements();
}
}
int main(int argc, char *argv[]) {
Tree *root = new Tree(10);
root->add(12);
root->add(15);
root->add(14);
root->add(3);
root->add(1);
root->add(2);
root->add(-1);
cout << endl;
cout << root->getData() << endl;
cout << root->maximumElement() << endl;
cout << root->minimumElement() << endl;
cout << "\nMaximum elements: ";
root->printMaximumElements();
cout << "\n\nMinimum elements: ";
root->printMinimumElements();
cout << endl;
delete root;
return 0;
}