¿Te molestaría si te lo doy en java? Tengo un muy buen ejemplo, se que tu lo podrás adaptar al C, ya que es casi igualito, te voy a dar una estructura de datos que realize para ti. Un grafo(árbol) esta compuesto por nodos, que tienen un valor y un indice, entonces la clase nodo seria así package ArbolesEnearios; public class NodoN { private Object elemento; private NodoN hijo,hermano; public NodoN(Object elemento){setElemento(elemento);} public void setElemento(Object elemento){this.elemento = elemento;} public Object getElemento(){return elemento;} public void setHijo(NodoN i){this.hijo = i;} public NodoN getHijo(){return hijo;} public void setHermano(NodoN d){this.hermano = d;} public NodoN getHermano(){return hermano;} public String toString(){return elemento+"";} } Y los metodos para llenar, y mostrar serian asi. public static void main(String[] args) { NodoN raiz; lectura_escritura.escribe("Raiz:"); raiz = new NodoN(new Integer(lectura_escritura.leeInt())); llenar(raiz); mostrar(raiz); lectura_escritura.escribe("\n"); } public static void mostrar(NodoN raiz){ if(raiz == null){ return; } lectura_escritura.escribe(raiz+" "); mostrar(raiz.getHijo()); mostrar(raiz.getHermano()); } public static void llenar(NodoN raiz){ int h; lectura_escritura.escribe("Hijo de "+raiz+": "); h = lectura_escritura.leeInt(); if(h>=0){ raiz.setHijo(new NodoN(new Integer(h))); llenar(raiz.getHijo()); llenarHermano(raiz.getHijo()); } } private static void llenarHermano(NodoN raiz) { lectura_escritura.escribe("Hermano de "+raiz+": "); int h=lectura_escritura.leeInt(); if(h>=0){ raiz.setHermano(new NodoN(new Integer(h))); llenar(raiz.getHermano()); llenarHermano(raiz.getHermano()); } } Ahora, la clase que uso para leer y escribir los datos de consola seria asi public class lectura_escritura { private static BufferedReader in; static{ in = new BufferedReader( new InputStreamReader(System.in)); } public static void escribe(String s){ System.out.print(s); } public static String leeString(){ String buffer = null; try { buffer = in.readLine(); }catch(IOException e){ System.err.println("ES.leeString(): " + e); } return buffer; } public static int leeInt(){ return Integer.parseInt(leeString()); } public static void main(String[] args) { escribe("ingrese su nombre: "); escribe("Hola " + leeString() + "\n\n"); escribe("ingrese su edad: "); escribe("Tu tienes " + leeInt() + " años\n"); } } Espero lo puedas adaptar al C, si no ya por lo menos tienes una idea muy clara sobre como funciona, cualquier inquietud no dudes en preguntar.