Ho letto alcuni altri articoli qui che sembravano simili, ma non rispondevano del tutto al mio problema. Mi è stata data una domanda per un incarico per assegnare ad ogni nodo di un albero binario la sua rispettiva profondità. Non riesco a capirlo.Assegnazione di una profondità a ciascun nodo
Per riferimento questo è il mio codice:
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--;
}
ho provato a fare funzionare attraverso con carta e penna e sembrava OK, ma la mia scrivania controllando le competenze sono chiaramente carente.
Qualcuno può indicarmi la direzione giusta, per favore? Questa è la prima volta che uso gli alberi e la ricorsione non è il mio punto di forza.
Risposta:
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);
}
}
Grazie a tutti quelli che hanno risposto al mio post. Capisco che stavo pensando a tutto sbagliato ora. Vado via e cerco di correggere il codice, visto quello che mi hai detto e postare i miei risultati finali. Non voglio semplicemente usare il codice di qualcuno senza comprenderlo appieno (anche se apprezzo che tu l'abbia pubblicato per me, grazie). – xyzjace
Funziona! Ho fatto un algoritmo ricorsivo che ha finito per abbinare il signor Cooper. In realtà fa parte di un algoritmo più grande che assegna le coordinate xey ai nodi dell'albero. L'algoritmo è nella domanda originale ora. – xyzjace