Sto assumendo o sei codifica in C o C ++.
un. Un nodo, se la struttura è definita in questo modo: struct node {struct node * sinistra, destra *; }; È possibile osservare che la struttura può o avere 0, 1 o 2 foglie. Così, il massimo è 2, min è 0 foglie.
altezza b.Minimal è zero, in cui conterrebbe solo il nodo radice. Si noti che il nodo radice non conta come un'altezza di 1. E 'chiamata anche la profondità a volte. Ecco un algoritmo per l'altezza:
int height(struct node *tree)
{
if (tree == NULL) return 0;
return 1 + max (height (tree->left), height (tree->right));
}
Per saperne di più: http://wiki.answers.com/Q/How_do_you_find_out_the_height_of_a_Binary_Search_Tree#ixzz1NIB17SkL
c. Perdonatemi se prendo questo il modo worng, ma sto assumendo se abbiamo mappato questo fuori su un pezzo di carta, saremmo cercando di trovare il numero di "collegamenti" che avremmo usare? In questo caso, sarebbe essere semplicemente il numero di nodi dell'albero -1 per il nodo radice. Questo algoritmo trovato su questa pagina http://forums.techarena.in/software-development/1147688.htm può aiutare: controllare se radice è nullo, quindi passare i nodi a destra ea sinistra come parametri nella funzione.
int countnodes(Node* root)
{
if (root == null || k<=0)
{
return 0;
} else {
return 1 + count(root.left,k-1) + count(root.right,k-1);
}
}
// remember to subtract one at the end.
int totalnodes = countnodes(root) - 1;
d. La complessità temporale per caso migliore è O (nlogn) dove n è il numero di nodi da inserire. Il caso peggiore, è O (n). E 'direttamente lineare.
Se avete altre domande basta google, c'è un sacco di cose da sapere su alberi binari di ricerca. Ma la maggior parte di essa è semplicemente ricorsione che si può imparare in 30 secondi.
Spero che aiuti. Buona fortuna per il tuo esame! Ho avuto la mia qualche mese fa. ;)