PDA

Visualizza la versione completa : [C] Calcolo profondità BST


slashino
27-06-2012, 12:05
Ho implementanto la funzione in oggetto nel seguente modo:


//*level_count
int level_count(t_tree tree)
{
if(tree->right==NULL && tree->left==NULL)
return 1;
else
{
if(tree->right!=NULL)
{
return 1+ level_count(tree->right);
}
else
{
if(tree->left!=NULL)
{
return 1+ level_count(tree->left);
}
else
{
int level_right=level_count(tree->right);
int level_left=level_count(tree->left);
if(level_right>level_left)
return 1+level_right;
else
return 1+level_left;

}
}
}
}

...però anzichè restituirmi la profondità mi restituisce il numero di valori inseriti. Ho controllato più volte e a livello logico mi sembra corretta, ma se inserisco i valori
13
18
8
9
14
6
che dovrebbero essere organizzati in un albero con profondità 3 (radice compresa) la funzione mi restituisce 6.
La funzione di inserimento nell'albero è la seguente:


//*tree_insert
t_tree tree_insert(t_tree tree,t_info info)
{
if(tree==NULL)
{
t_node_t* new_node;
new_node=node_t_create(info);
return new_node;
}
else
{
if(info.n>tree->info.n)
{
tree->right=tree_insert(tree->right,info);
return tree;
}
else
{
tree->left=tree_insert(tree->left,info);
return tree;
}
}
}

Qualcuno mi da qualchd hint per trovare l'errore?

Scara95
27-06-2012, 19:39
int profondita(t_tree t) {
if(t == NULL)
return 0;
return (1 + max(profondita(t->left), profondita(t->right)));
}

int max(int a, int b) {
return ((a > b) ? a : b);
}

slashino
27-06-2012, 19:58
return ((a > b) ? a : b);
[/CODE]
Questa cosa non l'ho mai vista! :d56: Grazie

Scara95
27-06-2012, 20:05
È uguale a:


if(a>b)
return a;
else
return b;

slashino
27-06-2012, 20:09
Sì, l'avevo capito :) Era un'espressione di meraviglia, o qualcosa del genere :)

Loading