Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- template <typename H> class Node{
- private:
- H key;
- Node<H> *parent, *left, *right;
- public:
- Node(H key){
- this->key = key;
- parent = left = right = NULL;
- }
- H getKey(){ return key; }
- Node<H>* getParent(){ return parent; }
- Node<H>* getLeft(){ return left; }
- Node<H>* getRight(){ return right; }
- void setParent(Node<H>* parent){ this->parent = parent; }
- void setLeft(Node<H>* left){ this->left = left; }
- void setRight(Node<H>* right){ this->right = right; }
- bool isLeaf(){
- if(!left && !right)
- return 1;
- return 0;
- }
- };
- template <typename H> class Tree{
- private:
- Node<H>* root;
- public:
- Tree(){ root = NULL; }
- Node<H>* getRoot() { return root; }a
- bool isEmpty(){
- if(!root)
- return 1;
- return 0;
- }
- Tree<H>* ins(H x){
- Node<H>* temp = new Node<H>(x);
- if(!root){
- root = temp;
- return this;
- }
- Node<H>* t = root;
- Node<H>* p = NULL;
- while(t){
- p = t;
- if( t->getKey() > x ) t = t->getLeft();
- else t = t->getRight();
- }
- if( p->getKey() > x ){
- p->setLeft(temp);
- temp->setParent(p);
- return this;
- }
- p->setRight(temp);
- temp->setParent(p);
- return this;
- /*METODO NOSTRO
- Node<H>* temp = new Node<H>(x);
- if(isEmpty()){
- root = temp;
- return this;
- }
- Node<H>* n = root;
- while(1){
- if(n->isLeaf()){
- if(temp->getKey() < n->getKey()){
- n->setLeft(temp);
- temp->setParent(n);
- return this;
- }
- n->setRight(temp);
- temp->setParent(n);
- return this;
- }
- if(temp->getKey() < n->getKey()){
- if(!n->getLeft()){
- n->setLeft(temp);
- temp->setParent(n);
- return this;
- }
- n = n->getLeft();
- }
- else{
- if(!n->getRight()){
- n->setRight(temp);
- temp->setParent(n);
- return this;
- }
- n = n->getRight();
- }
- }*/
- }
- Node<H>* getMin(Node<H>* r){
- if( r == NULL ) return NULL;
- while(r->getLeft()) r = r->getLeft();
- cout << r->getKey();
- return r;
- }
- Node<H>* getMax(Node<H>* r){
- if( r == NULL ) return NULL;
- while(r->getRight()) r = r->getRight();
- cout << r->getKey();
- return r;
- }
- void rec_inorder(Node<H>* r){
- if(!r) return;
- rec_inorder(r->getLeft());
- cout << r->getKey() << " ";
- rec_inorder(r->getRight());
- }
- };
- int main(){
- Tree<int> *T = new Tree<int>();
- T->ins(5)->ins(56)->ins(67)->ins(2);
- T->rec_inorder(T->getRoot());
- cout << endl << "Massimo " ;
- T->getMax(T->getRoot());
- cout << endl << "Minimo " ;
- T->getMin(T->getRoot());
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement