-Ingrese nombre:
pedro
-Ingrese edad:
10
y que se visualice como: pedro-10
Les dejo el código por si tienen alguna idea o la solución
Gracias
Código
#include <iostream> #include<cctype> #include <stdlib.h> #include <conio.h> using namespace std; struct node { int element; node *left; node *right; int altura; }; typedef struct node *nodeptr; class bsarbol { public: void insert(int,nodeptr &); void del(int, nodeptr &); int deletemin(nodeptr &); void find(int,nodeptr &); nodeptr findmin(nodeptr); nodeptr findmax(nodeptr); void makeempty(nodeptr &); void copy(nodeptr &,nodeptr &); nodeptr nodecopy(nodeptr &); void preorder(nodeptr); void inorder(nodeptr); void postorder(nodeptr); int bsheight(nodeptr); nodeptr srl(nodeptr &); nodeptr drl(nodeptr &); nodeptr srr(nodeptr &); nodeptr drr(nodeptr &); int max(int,int); int nonodes(nodeptr); }; // Inserting a node void bsarbol::insert(int x,nodeptr &p) { if (p == NULL) { p = new node; p->element = x; p->left=NULL; p->right = NULL; p->altura=0; if (p==NULL) { cout<<"Fuera de rango\n"<<endl; } } else { if (x<p->element) { insert(x,p->left); if ((bsheight(p->left) - bsheight(p->right))==2) { if (x < p->left->element) { p=srl(p); } else { p = drl(p); } } } else if (x>p->element) { insert(x,p->right); if ((bsheight(p->right) - bsheight(p->left))==2) { if (x > p->right->element) { p=srr(p); } else { p = drr(p); } } } else { cout<<"El elemento existe\n"<<endl; } } int m,n,d; m=bsheight(p->left); n=bsheight(p->right); d=max(m,n); p->altura = d + 1; } // Finding the Smallest nodeptr bsarbol::findmin(nodeptr p) { if (p==NULL) { cout<<"El arbol esta vacio\n"<<endl; return p; } else { while(p->left !=NULL) { p=p->left; //return p; } return p; } } // Finding the Largest node nodeptr bsarbol::findmax(nodeptr p) { if (p==NULL) { cout<<"El arbol esta vacio\n"<<endl; return p; } else { while(p->right !=NULL) { p=p->right; //return p; } return p; } } // Finding an element void bsarbol::find(int x,nodeptr &p) { if (p==NULL) { cout<<"Elemento no encontrado \n"<<endl; } else { if (x < p->element) { find(x,p->left); } else { if (x>p->element) { find(x,p->right); } else { cout<<"Elemento encontrado\n"<<endl; } } } } // Copy a tree void bsarbol::copy(nodeptr &p,nodeptr &p1) { makeempty(p1); p1 = nodecopy(p); } // Make a tree empty void bsarbol::makeempty(nodeptr &p) { nodeptr d; if (p != NULL) { makeempty(p->left); makeempty(p->right); d=p; free(d); p=NULL; } } // Copy the nodes nodeptr bsarbol::nodecopy(nodeptr &p) { nodeptr temp; if (p==NULL) { return p; } else { temp = new node; temp->element = p->element; temp->left = nodecopy(p->left); temp->right = nodecopy(p->right); return temp; } } // Deleting a node void bsarbol::del(int x,nodeptr &p) { nodeptr d; if (p==NULL) { cout<<"Elemnto no encontrado\n"<<endl; } else if ( x < p->element) { del(x,p->left); } else if (x > p->element) { del(x,p->right); } else if ((p->left == NULL) && (p->right == NULL)) { d=p; free(d); p=NULL; cout<<"Elemento borrado\n"<<endl; } else if (p->left == NULL) { d=p; free(d); p=p->right; cout<<"Elemento borrado\n"<<endl; } else if (p->right == NULL) { d=p; p=p->left; free(d); cout<<"Elemento borrado\n"<<endl; } else { p->element = deletemin(p->right); } } int bsarbol::deletemin(nodeptr &p) { int c; cout<<"inside deltemin\n"<<endl; if (p->left == NULL) { c=p->element; p=p->right; return c; } else { c=deletemin(p->left); return c; } } void bsarbol::preorder(nodeptr p) { if (p!=NULL) { cout<<p->element<<"\t"; preorder(p->left); preorder(p->right); } } // Inorder Printing void bsarbol::inorder(nodeptr p) { if (p!=NULL) { inorder(p->left); cout<<p->element<<"\t"; inorder(p->right); } } // PostOrder Printing void bsarbol::postorder(nodeptr p) { if (p!=NULL) { postorder(p->left); postorder(p->right); cout<<p->element<<"\t"; } } int bsarbol::max(int value1, int value2) { return ((value1 > value2) ? value1 : value2); } int bsarbol::bsheight(nodeptr p) { int t; if (p == NULL) { return -1; } else { t = p->altura; return t; } } nodeptr bsarbol:: srl(nodeptr &p1) { nodeptr p2; p2 = p1->left; p1->left = p2->right; p2->right = p1; p1->altura = max(bsheight(p1->left),bsheight(p1->right)) + 1; p2->altura = max(bsheight(p2->left),p1->altura) + 1; return p2; } nodeptr bsarbol:: srr(nodeptr &p1) { nodeptr p2; p2 = p1->right; p1->right = p2->left; p2->left = p1; p1->altura = max(bsheight(p1->left),bsheight(p1->right)) + 1; p2->altura = max(p1->altura,bsheight(p2->right)) + 1; return p2; } nodeptr bsarbol:: drl(nodeptr &p1) { p1->left=srr(p1->left); return srl(p1); } nodeptr bsarbol::drr(nodeptr &p1) { p1->right = srl(p1->right); return srr(p1); } int bsarbol::nonodes(nodeptr p) { int count=0; if (p!=NULL) { nonodes(p->left); nonodes(p->right); count++; } return count; } int main() { //clrscr(); nodeptr root,root1,min,max;//,flag; int a,op,findele,delele; char ch='y'; bsarbol bst; //system("clear"); root = NULL; root1=NULL; cout<<"\n\t\t\t\tBIENVENIDO A AVL "<<endl; cout<<"\t\t\t\t:::::::::::::::::::\n"<<endl; do { cout<<"\t\t::::::::::::::::::::::::::::::::::::::::::::::::"<<endl; cout<<"\t\t::::Ingrese 1 para nuevo nodo::::::::::::::::"<<endl; cout<<"\t\t::::Ingrese 2 para encontrar el minimo valor:::::::::::"<<endl; cout<<"\t\t::::Ingrese 3 para encontrar maximo valor:::::::::::::::"<<endl; cout<<"\t\t::::Ingrese 4 para buscar un valor:::::::::::::::::::"<<endl; cout<<"\t\t::::Ingrese 5 para borrar un valor:::::::::::::::::::"<<endl; cout<<"\t\t::::Ingrese 6 para mostrar Preorden:::::::::::::::::"<<endl; cout<<"\t\t::::Ingrese 7 para mostrar Inorden::::::::::::::::::"<<endl; cout<<"\t\t::::Ingrese 8 para mostara Postorden::::::::::::::::"<<endl; cout<<"\t\t::::Ingrese 9 para mostrar la altura del arbol:::"<<endl; cout<<"\t\t::::Ingrese 0 para salir:::::::::::::::::::::::::::::"<<endl; cout<<"\t\t::::::::::::::::::::::::::::::::::::::::::::::::\n"<<endl; cout<<"\nIngrese una opcion: "; cin>>op; switch(op) { case 1: cout<<"\n\t\tAGREGANDO NUEVO NODO"<<endl; cout<<"\t\t:::::::::::::\n"<<endl; cout<<"Ingrese un valor: "; cin>>a; bst.insert(a,root); cout<<"\nEl nuevo valor se ha agregado\n"<<endl; break; case 2: if (root !=NULL) { min=bst.findmin(root); cout<<"\nEl minimo elemento del arbol es: "<<min->element<<endl; } break; case 3: if (root !=NULL) { max=bst.findmax(root); cout<<"\nEl maximo elemento del arbol es: "<<max->element<<endl; } break; case 4: cout<<"\nNodo a buscar: "; cin>>findele; if (root != NULL) { bst.find(findele,root); } break; case 5: cout<<"\nNodo a borrar: "; cin>>delele; bst.del(delele,root); bst.inorder(root); cout<<endl; break; case 6: cout<<"\n\t\tPRE-ORDER "<<endl; bst.preorder(root); cout<<endl; break; case 7: cout<<"\n\t\tIN-ORDER "<<endl; bst.inorder(root); cout<<endl; break; case 8: cout<<"\n\t\tPOST ORDER "<<endl; bst.postorder(root); cout<<endl; break; case 9: cout<<"\n\t\ALTURA\n"<<endl; cout<<"La altura del arbol es: "<<bst.bsheight(root)<<endl; break; case 0: cout<<"\n\tAdios\n"<<endl; break; default: cout<<"Intente otra vez\n"<<endl; break; } system("pause"); system("cls"); }while(op != 0); return 0; }
Mod: Los códigos deben ir en etiquetas GeSHi