Provo a ragionarci insieme a voi, ad alta voce , partendo dalla definizione di livello di un albero.
La dispensa rilasciata dal docente parla di livello e non di profondità ma immagino entrambi si riferiscano alla stessa cosa, detto questo la definizione recita:
il livello dell’albero è il massimo fra i livelli dei suoi nodi
mentre
il livello di un nodo è il numero dei suoi antecedenti
inoltre si afferma:
il livello di un nodo è dato dalla lunghezza del cammino fra la radice e il nodo; per esempio, il livello della radice è 0 (assumiamo che il livello di un albero vuoto sia -1). Il livello dell’albero è il più lungo cammino fra la radice e una foglia.
Scarto la seconda porzione di codice in quanto non mi genera mai -1, caso in cui l'albero è vuoto.
Non mi rimane che analizzare il primo pezzo di codice che l'ho "rivisitato" in :
// albero vuoto = -1
// livello albero min. = 0
int tree_depth(Node* tree) {
if (!tree) return -1;
return ( 1 + max( tree_depth(tree->left), tree_depth(tree->right) ) );
}
sinceramente non mi viene in mente altro... dove fallisce questo codice?