He leído algunos otros artículos aquí que parecían similares, pero que no respondían del todo mi problema. Me han dado una pregunta para una tarea para asignar a cada nodo en un árbol binario su profundidad respectiva. Simplemente no puedo entenderlo.Asignar una profundidad a cada nodo
de referencia, esta es mi código:
struct treeNode {
int item;
int depth;
treeNode *left;
treeNode *right;
};
typedef treeNode *Tree;
int assignDepth(Tree &T, int depth)
{
if(T!=NULL)
{
depth = assignDepth(T->left, depth++);
T->depth = depth;
depth = assignDepth(T->right, depth++);
}
else //leaf
return depth--;
}
Intenté funcionar a través de lápiz y papel y parecía que estaba bien, pero mi escritorio la verificación de conocimientos se carece de claridad.
¿Alguien puede indicarme la dirección correcta, por favor? Esta es la primera vez que uso árboles, y la recursividad no es mi punto fuerte.
Respuesta:
void treecoords(Tree &T, int depth)
{
static int count = -1; //set to -1 so the precrement before assignment doesn't give the wrong values
if(T!=NULL)
{
treecoords(T->left, depth+1); //depth decrements automatically once this function call is removed from the stack
count++;
T->x = count;
T->y = depth;
treecoords(T->right, depth+1);
}
}
Gracias a todos los que respondieron mi mensaje. Entiendo que estaba pensando en todo mal ahora. Me iré y trataré de arreglar el código dado lo que me has contado y publicaré mis resultados finales. No quiero simplemente usar el código de alguien sin entenderlo completamente (aunque agradezco que me lo hayas publicado, gracias). – xyzjace
¡Funciona! Hice un algoritmo recursivo que terminó emparejando el del Sr. Cooper. En realidad, es parte de un algoritmo mayor que asigna coordenadas xey a los nodos de los árboles. El algoritmo está en la pregunta original ahora. – xyzjace