RE:como saber ancho de un arbol?
Lo puedes hacer en forma recursiva, de hecho es bastante recomendable en esa forma para simplificar código y optimizar el programa, lo que puedes hacer es un recorrido del árbol en orden infijo, mientras vas a la izquierda incrementa un contador, al terminar el recorrido a la izquierda guarda la primera vez el contador en la variable máximo, de esta manera tendrás el nivel máximo, al pasar por el nodo padre inicializa para un nuevo conteo dependiendo del nivel en que te encuentres y al ir a la derecha incrementa.
Los recorridos por una dirección te indican crecimiento en el momento que pases por un nodo padre indica un regreso.
Si no te quieres romper el coco con las inicializaciones haz esto
inc(contador);
infijo(izq,contador);
infijo(der,contador);
dec(contador);
en realidad el recorrido infijo solo existe de modo imaginario para entender el problema.
Al terminar sabes el nivel máximo, la altura del árbol, si estás en el nivel 2 (es decir en un hijo de la ríz) el ancho es 2, calculado por 2^(altura-1)
Suerte