Advertisement
juanjo12x

Arbol_Duplicado

Jun 13th, 2014
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.54 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. TNodo* Arbol_duplicado(TNodo*);
  14. int es_nodo_hoja(TNodo *);
  15. void pre_orden(TNodo * ptrRaiz);
  16.  
  17. void crear_arbol(TNodo ** ptrRaiz){
  18.     *ptrRaiz = NULL;
  19. }
  20. void inserta_nodo(TNodo **ptrRaiz, int valor){
  21.     TNodo *ptrHoja, *ptrRecorrido, *ptrPadre;
  22.     ptrHoja = (TNodo*)malloc(sizeof(TNodo));
  23.     ptrHoja->valor = valor;
  24.     ptrHoja->ptrHI=ptrHoja->ptrHD=NULL;
  25.    
  26.     if(*ptrRaiz){
  27.         ptrRecorrido = *ptrRaiz;
  28.         ptrPadre = NULL;
  29.        
  30.         while (ptrRecorrido){
  31.             ptrPadre = ptrRecorrido;
  32.             if (ptrRecorrido->valor >= valor)
  33.                 ptrRecorrido = ptrRecorrido->ptrHI;
  34.             else
  35.                 ptrRecorrido = ptrRecorrido->ptrHD;                  
  36.         }
  37.         if (ptrPadre->valor >= valor)
  38.             ptrPadre->ptrHI = ptrHoja;
  39.         else
  40.             ptrPadre->ptrHD = ptrHoja;
  41.     }
  42.     else{
  43.      *ptrRaiz = ptrHoja;  
  44.     }          
  45. }
  46.  
  47. int es_nodo_hoja(TNodo *ptrRaiz){
  48.     if (ptrRaiz->ptrHI ==NULL) return 1;
  49.     if (ptrRaiz->ptrHD ==NULL) return 1;
  50.     return 0;
  51. }
  52.  
  53. void pre_orden(TNodo * ptrRaiz){
  54.     if (ptrRaiz){
  55.         printf("%d - ", ptrRaiz->valor);
  56.         pre_orden(ptrRaiz->ptrHI);
  57.         pre_orden(ptrRaiz->ptrHD);
  58.     }
  59. }
  60.  
  61. TNodo* Arbol_duplicado(TNodo*raiz){
  62.   TNodo*aux1;
  63.    
  64.     if(raiz!=NULL){
  65.         inserta_nodo(&aux,raiz->valor);//inserto valor en raiz
  66.         inserta_nodo(&aux,raiz->valor);//inserto duplicado;
  67.         if(es_nodo_hoja(raiz)){
  68.             return aux;
  69.         }else{
  70.             if(raiz->ptrHI!=NULL)
  71.             aux1=Arbol_duplicado(raiz->ptrHI);//duplicado
  72.             if (raiz->ptrHD!=NULL)
  73.             aux1=Arbol_duplicado(raiz->ptrHD);//duplicado
  74.            
  75.         }
  76.          aux1=aux;
  77.          return aux;
  78.     }  
  79. }
  80.  
  81. int main(int argc, char** argv) {
  82.     TNodo *ptrRaiz;TNodo*ptDuplicado;
  83.     crear_arbol(&ptrRaiz);
  84.     crear_arbol(&aux);
  85.     /*inserta_nodo(&ptrRaiz, 2);
  86.     inserta_nodo(&ptrRaiz, 1);
  87.     inserta_nodo(&ptrRaiz, 3);*/
  88.     inserta_nodo(&ptrRaiz, 4);
  89.     inserta_nodo(&ptrRaiz, 2);
  90.     inserta_nodo(&ptrRaiz, 1);
  91.     inserta_nodo(&ptrRaiz, 3);
  92.     inserta_nodo(&ptrRaiz, 5);
  93.     pre_orden(ptrRaiz);
  94.     printf("\n");
  95.     ptDuplicado=Arbol_duplicado(ptrRaiz);
  96.     pre_orden(ptDuplicado);
  97.     return (EXIT_SUCCESS);
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement