#include <stdio.h>
#include <stdlib.h>


typedef struct arbol
{
  int clave;
  struct arbol *izq;
  struct arbol *der;
} arbol;

void crear(arbol **a, int *preorden , int *inorden, int *pos, int izq, int der);


int main(void)
{
  arbol *a;
  int preorden[] = {1,2};//,4,3,5,6};
  int inorden[]  = {2,1};//,4,1,5,3,6};
  int pos = 0;

  crear(&a, preorden, inorden, &pos, 0,1);

  return 0;
}


void crear(arbol **a, int *preorden , int *inorden, int *pos, int izq, int der)
{
  int i;

  if (izq > der)
    *a = NULL;
  else if (izq == der) {
    *a = (arbol *) malloc(sizeof(arbol));
    (*a)->clave = preorden[*pos];
    (*a)->izq = (*a)->der = NULL;
    (*pos)++;
  }
  else {
    *a = (arbol *) malloc(sizeof(arbol));
    (*a)->clave = preorden[*pos];
      /* Busca Clave 'Pos' en tabla de orden central */
    i = izq;
    while (inorden[i] != (*a)->clave) i++;
      /* actualiza la posicion */
    (*pos)++;
      /* crea los subarboles izquierdo y derecho */
    crear(&(*a)->izq, preorden, inorden, pos, izq, i-1);
    crear(&(*a)->der, preorden, inorden, pos, i+1, der);
  }
}