Binary Search Albero

voti
0

Il mio professore ha inviato alcune domande di revisione per l'esame finale. E io non riesco a trovare le risposte per esso. Qualsiasi aiuto sarà molto apprezzato!

Si consideri un albero binario di n nodi:
a. Qual è il numero minimo e massimo di nodi foglia?
b. Qual è il valore minimo e massimo dell'altezza?
c. Quante puntatori sono utilizzati da l'albero (senza contare i puntatori nulli, e assumendo non teniamo un campo che memorizza il genitore)?

* D. Qual è il peggior tempo di esecuzione cura per l'inserimento di n nodi in un (inizialmente vuota) albero binario di ricerca?

È pubblicato 24/05/2011 alle 18:27
fonte dall'utente
In altre lingue...                            


4 risposte

voti
0

Prova a disegnare vari alberi su una carta e vedere quello che si ottiene. Ricordare che un albero binario è definito come un albero in cui ogni nodo può avere 0 (in questo caso si tratta di una foglia), 1 o 2 bambini. Per la vostra domanda è necessario esaminare il caso molto sbilanciato di 1 bambino per nodo.

Risposto il 24/05/2011 a 18:31
fonte dall'utente

voti
0

Prendere in considerazione:

Se stai cercando di massimizzare il numero di foglie, si desidera il minor numero di nodi interni possibili (e il contrario se si sta cercando di ridurre al minimo il numero di foglie). Come si può realizzare questo?

Per ottenere un albero di altezza massima, metterai il minor numero di nodi in ogni livello il più possibile. Come si può fare? Al contrario, per l'altezza minima, qual è il numero massimo di nodi si può mettere ad ogni livello?

Quanti modi ci sono per arrivare a ogni nodo di un albero? Così, quanti puntatori avete bisogno?

Risposto il 24/05/2011 a 18:33
fonte dall'utente

voti
0

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. ;)

Risposto il 24/05/2011 a 18:39
fonte dall'utente

voti
1

  • Il numero massimo di fogli è ceil (n / 2). Il numero minimo è 1
  • L'altezza massima è n. Il minimo è piano (log_2 (n))
Risposto il 24/05/2011 a 18:44
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more