Advertisement
juanjo12x

Arbol_Espejo

Jun 13th, 2014
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. //Juanjose Tenorio Peña
  5. typedef struct nodo{
  6.     int valor;
  7.     struct nodo* ptrHI;
  8.     struct nodo* ptrHD;
  9. } TNodo;
  10. TNodo* aux;
  11. void crear_arbol(TNodo ** ptrRaiz);
  12. void inserta_nodo(TNodo **ptrRaiz, int valor);
  13. void insertar_espejo(TNodo **, int valor);
  14. TNodo* Arbol_espejo(TNodo*);
  15. int es_nodo_hoja(TNodo *);
  16. void pre_orden(TNodo * ptrRaiz);
  17. void crear_arbol(TNodo ** ptrRaiz){
  18.     *ptrRaiz = NULL;
  19. }
  20.  
  21. void inserta_nodo(TNodo **ptrRaiz, int valor){
  22.     TNodo *ptrHoja, *ptrRecorrido, *ptrPadre;
  23.     ptrHoja = (TNodo*)malloc(sizeof(TNodo));
  24.     ptrHoja->valor = valor;
  25.     ptrHoja->ptrHI=ptrHoja->ptrHD=NULL;
  26.    
  27.     if(*ptrRaiz){
  28.         ptrRecorrido = *ptrRaiz;
  29.         ptrPadre = NULL;
  30.        
  31.         while (ptrRecorrido){
  32.             ptrPadre = ptrRecorrido;
  33.             if (ptrRecorrido->valor > valor)
  34.                 ptrRecorrido = ptrRecorrido->ptrHI;
  35.             else
  36.                 ptrRecorrido = ptrRecorrido->ptrHD;                  
  37.         }
  38.         if (ptrPadre->valor > valor)
  39.             ptrPadre->ptrHI = ptrHoja;
  40.         else
  41.             ptrPadre->ptrHD = ptrHoja;
  42.     }
  43.     else{
  44.      *ptrRaiz = ptrHoja;  
  45.     }          
  46. }
  47. void insertar_espejo(TNodo **ptrRaiz, int valor){
  48.     TNodo *ptrHoja, *ptrRecorrido, *ptrPadre;
  49.     ptrHoja = (TNodo*)malloc(sizeof(TNodo));
  50.     ptrHoja->valor = valor;
  51.     ptrHoja->ptrHI=ptrHoja->ptrHD=NULL;
  52.    
  53.     if(*ptrRaiz){
  54.         ptrRecorrido = *ptrRaiz;
  55.         ptrPadre = NULL;
  56.        
  57.         while (ptrRecorrido){
  58.             ptrPadre = ptrRecorrido;
  59.             if (ptrRecorrido->valor < valor)
  60.                 ptrRecorrido = ptrRecorrido->ptrHI;
  61.             else
  62.                 ptrRecorrido = ptrRecorrido->ptrHD;                  
  63.         }
  64.         if (ptrPadre->valor < valor)
  65.             ptrPadre->ptrHI = ptrHoja;
  66.         else
  67.             ptrPadre->ptrHD = ptrHoja;
  68.     }
  69.     else{
  70.      *ptrRaiz = ptrHoja;  
  71.     }          
  72. }
  73. int es_nodo_hoja(TNodo *ptrRaiz){
  74.     if (ptrRaiz->ptrHI ==NULL) return 1;
  75.     if (ptrRaiz->ptrHD ==NULL) return 1;
  76.     return 0;
  77. }
  78. TNodo* Arbol_espejo(TNodo* raiz){
  79.     TNodo*aux1;
  80.    
  81.     if(raiz!=NULL){
  82.         insertar_espejo(&aux,raiz->valor);//inserto valor en raiz;
  83.         if(es_nodo_hoja(raiz)){
  84.             return aux;
  85.         }else{
  86.             if(raiz->ptrHI!=NULL)
  87.             aux1=Arbol_espejo(raiz->ptrHI);//espejo
  88.             if (raiz->ptrHD!=NULL)
  89.             aux1=Arbol_espejo(raiz->ptrHD);
  90.            
  91.         }
  92.          aux1=aux;
  93.          return aux;
  94.     }
  95. }
  96. void pre_orden(TNodo * ptrRaiz){
  97.     if (ptrRaiz){
  98.         printf("%d - ", ptrRaiz->valor);
  99.         pre_orden(ptrRaiz->ptrHI);
  100.         pre_orden(ptrRaiz->ptrHD);
  101.     }
  102. }
  103. int main(int argc, char** argv) {
  104.     TNodo *ptrRaiz;TNodo*ptEspejo;
  105.     crear_arbol(&ptrRaiz);
  106.     crear_arbol(&aux);
  107.     inserta_nodo(&ptrRaiz, 4);
  108.     inserta_nodo(&ptrRaiz, 2);
  109.     inserta_nodo(&ptrRaiz, 1);
  110.     inserta_nodo(&ptrRaiz, 3);
  111.     inserta_nodo(&ptrRaiz, 5);
  112.     pre_orden(ptrRaiz);
  113.     printf("\n");
  114.     ptEspejo=Arbol_espejo(ptrRaiz);
  115.     pre_orden(ptEspejo);
  116.    
  117.     return (EXIT_SUCCESS);
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement