eduardovp97

ex5.c

Nov 14th, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "tree.h"
  4.  
  5. #define N 20
  6. /*
  7. Implemente una función que reciba un árbol binario y dos
  8. nodos del mismo, y encuentre un camino entre los nodos.
  9. */
  10. void findPath(TTree *tree,TData a, TData b);
  11. int binarySearch(TData array[],int ini, int fin, TData k);
  12. int eliminarComunes(TData array1[], int n1, TData array2[], int n2);
  13. void invertir(TData array[], int n);
  14. int find(TNode *node, TData a, TData array[]);
  15. void printArray(TData array[], int n);
  16.  
  17. int main(){
  18.    
  19.     TTree arbol;
  20.     crearArbol(&arbol);
  21.     insertar(&arbol,15);
  22.     insertar(&arbol,6);
  23.     insertar(&arbol,3);
  24.     insertar(&arbol,1);
  25.     insertar(&arbol,4);
  26.     insertar(&arbol,9);
  27.     insertar(&arbol,7);
  28.     insertar(&arbol,12);
  29.     insertar(&arbol,20);
  30.     insertar(&arbol,18);
  31.     insertar(&arbol,24);
  32.     insertar(&arbol,17);
  33.    
  34.     findPath(&arbol,9,17);
  35.    
  36.     return 0;
  37. }
  38.  
  39. void findPath(TTree *tree,TData a, TData b){
  40.     TData array1[N],array2[N],array[N];
  41.     int n1, n2, n3, i;
  42.  
  43.     n1 = find(tree->root,a,array1);
  44.     n2 = find(tree->root,b,array2);
  45.     invertir(array1,n1);
  46.     printArray(array1,n1);
  47.     printArray(array2,n2);
  48.     n3 = eliminarComunes(array1,n1,array2,n2);
  49.     printArray(array1,n3);
  50.  
  51. }
  52.  
  53. void printArray(TData array[], int n){
  54.     int i;
  55.     for(i=0; i<n; i++)
  56.         printf("%d ",array[i]);
  57.     printf("\n");
  58. }
  59.  
  60. int binarySearch(TData array[],int ini, int fin, TData k){
  61.     int mid = (ini+fin)/2;
  62.     if(array[mid] == k)
  63.         return mid;
  64.     if(array[mid]>k)
  65.         return binarySearch(array,ini,mid-1,k);
  66.     else
  67.         return binarySearch(array,mid+1,fin,k);
  68. }
  69.  
  70. int eliminarComunes(TData array1[], int n1, TData array2[], int n2){
  71.     int count = 0;
  72.     int pos = binarySearch(array1,0,n1-1,array2[0]);
  73.     int i;
  74.     count = pos+n2;
  75.     for(i=0; i<count; i++)
  76.         array1[i+pos] = array2[i];
  77.  
  78.     return count;
  79. }
  80.  
  81. void invertir(TData array[], int n){
  82.     int i;
  83.     TData aux;
  84.     for(i=0; i<(n/2); i++){
  85.         aux = array[i];
  86.         array[i] = array[n-1-i];
  87.         array[n-1-i] = aux;
  88.     }
  89. }
  90.  
  91. int find(TNode *node, TData a, TData array[]){
  92.     TNode *p = node;
  93.     int i=0;
  94.     while(p != NULL){
  95.         if(p->info == a)
  96.             break;
  97.         array[i++] = p->info;
  98.         if(p->info < a){
  99.             p = p->der;
  100.         }else{
  101.             p = p->izq;
  102.         }
  103.     }
  104.     return i;
  105. }
Add Comment
Please, Sign In to add comment