Advertisement
Gilgamesh858

alberoEsempio.cpp

Jun 11th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.65 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template <typename H> class Node{
  6.     private:
  7.         H key;
  8.         Node<H> *parent, *left, *right;
  9.     public:
  10.         Node(H key){
  11.         this->key = key;
  12.         parent = left = right = NULL;
  13.         }
  14.         H getKey(){ return key; }
  15.         Node<H>* getParent(){ return parent; }
  16.         Node<H>* getLeft(){ return left; }
  17.         Node<H>* getRight(){ return right; }
  18.         void setParent(Node<H>* parent){ this->parent = parent; }
  19.         void setLeft(Node<H>* left){ this->left = left; }
  20.         void setRight(Node<H>* right){ this->right = right; }
  21.         bool isLeaf(){
  22.             if(!left && !right)
  23.                 return 1;
  24.             return 0;
  25.         }
  26. };
  27.  
  28. template <typename H> class Tree{
  29.     private:
  30.         Node<H>* root;
  31.     public:
  32.         Tree(){ root = NULL; }
  33.         Node<H>* getRoot() { return root; }a
  34.         bool isEmpty(){
  35.             if(!root)
  36.                 return 1;
  37.             return 0;
  38.         }
  39.         Tree<H>* ins(H x){
  40.             Node<H>* temp = new Node<H>(x);
  41.             if(!root){
  42.                 root = temp;
  43.                 return this;
  44.             }
  45.  
  46.             Node<H>* t = root;
  47.             Node<H>* p = NULL;
  48.             while(t){
  49.                 p = t;
  50.                 if( t->getKey() > x ) t = t->getLeft();
  51.                 else t = t->getRight();
  52.             }
  53.             if( p->getKey() > x ){
  54.               p->setLeft(temp);
  55.               temp->setParent(p);
  56.               return this;
  57.             }
  58.             p->setRight(temp);
  59.             temp->setParent(p);
  60.             return this;
  61.         /*METODO NOSTRO
  62.             Node<H>* temp = new Node<H>(x);
  63.             if(isEmpty()){
  64.                 root = temp;
  65.                 return this;
  66.             }
  67.             Node<H>* n = root;
  68.             while(1){
  69.                 if(n->isLeaf()){
  70.                     if(temp->getKey() < n->getKey()){
  71.                         n->setLeft(temp);
  72.                         temp->setParent(n);
  73.                         return this;
  74.                     }
  75.                     n->setRight(temp);
  76.                     temp->setParent(n);
  77.                     return this;
  78.                 }
  79.                 if(temp->getKey() < n->getKey()){
  80.                     if(!n->getLeft()){
  81.                         n->setLeft(temp);
  82.                         temp->setParent(n);
  83.                         return this;
  84.                     }
  85.                     n = n->getLeft();
  86.                 }
  87.                 else{
  88.                     if(!n->getRight()){
  89.                         n->setRight(temp);
  90.                         temp->setParent(n);
  91.                         return this;
  92.                     }
  93.                     n = n->getRight();
  94.                 }
  95.             }*/
  96.         }
  97.         Node<H>* getMin(Node<H>* r){
  98.             if( r == NULL ) return NULL;
  99.             while(r->getLeft()) r = r->getLeft();
  100.             cout << r->getKey();
  101.             return r;
  102.         }
  103.         Node<H>* getMax(Node<H>* r){
  104.             if( r == NULL ) return NULL;
  105.             while(r->getRight()) r = r->getRight();
  106.             cout << r->getKey();
  107.             return r;
  108.         }
  109.         void rec_inorder(Node<H>* r){
  110.             if(!r) return;
  111.             rec_inorder(r->getLeft());
  112.             cout << r->getKey() << " ";
  113.             rec_inorder(r->getRight());
  114.         }
  115. };
  116.  
  117. int main(){
  118.     Tree<int> *T = new Tree<int>();
  119.     T->ins(5)->ins(56)->ins(67)->ins(2);
  120.     T->rec_inorder(T->getRoot());
  121.     cout << endl << "Massimo " ;
  122.     T->getMax(T->getRoot());
  123.     cout << endl << "Minimo " ;
  124.     T->getMin(T->getRoot());
  125.  return 0;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement