Binært søketre

stemmer
0

Min professor lagt ut noen gjennomgang spørsmål til avsluttende eksamen. Og jeg kan ikke synes å finne svar på det. Alle hjelpe ville være verdsatt!

Betrakt et binært tre av n noder:
en. Hva er det minimale og maksimale antall løvnodene?
b. Hva er minimal og maksimal verdi av høyden?
c. Hvor mange pekere brukes av treet (ikke medregnet null pekere, og forutsatt at vi ikke holde et felt som lagrer den overordnede)?

* D. Hva er det verste omsorg kjøretid for å sette inn n noder i et (i utgangspunktet tom) binært søketre?

Publisert på 24/05/2011 klokken 17:27
kilden bruker
På andre språk...                            


4 svar

stemmer
0

Prøv å tegne forskjellige trær på et papir og se hva du får. Husk at et binært tre er definert som et tre hvor hver node kan ha 0 (i hvilket tilfelle det er et blad), 1 eller 2 barn. For spørsmålet ditt bør du undersøke svært ubalansert gjelder 1 barn per node.

Svarte 24/05/2011 kl. 17:31
kilden bruker

stemmer
0

Ta i betraktning:

Hvis du prøver å maksimere antall blader, vil du så få interne noder som mulig (og motsatt hvis du prøver å minimere antall blader). Hvordan kan du oppnå det?

For å få et tre av maksimal høyde, vil du sette så få noder på hvert nivå som mulig. Hvordan kan du gjøre det? Omvendt, for minstehøyde, hva er det maksimale antall noder du kan sette på hvert nivå?

Hvor mange måter er der for å komme til hver node i et tre? Dermed hvor mange pekere trenger du?

Svarte 24/05/2011 kl. 17:33
kilden bruker

stemmer
0

Jeg antar du er enten koding i C eller C ++.

en. En node, hvis struktur blir definert slik: struct {noden struct node * venstre, høyre *; }; Du kan observere at strukturen kan enten ha 0, 1 eller 2 blader. Så, er det maks to, er min 0 blader.

b.Minimal høyde er lik null, i hvilket bare ville inneholde rotnoden. Merk at rotnoden teller ikke som en høyde på 1. Det er også kalt dybde til tider. Her er en algoritme for høyden:

    int height(struct node *tree) 
    { 
    if (tree == NULL) return 0;
    return 1 + max (height (tree->left), height (tree->right)); 
    }

Les mer: http://wiki.answers.com/Q/How_do_you_find_out_the_height_of_a_Binary_Search_Tree#ixzz1NIB17SkL

c. Unnskyld meg hvis jeg tar dette worng måten, men jeg antar hvis vi kartlagt dette ut på et stykke papir, vil vi være å prøve å finne antall "linker" som vi ville bruke? I dette tilfelle, ville det bare være antall noder i treet -1 for rotnode. Denne algoritmen funnet på denne siden http://forums.techarena.in/software-development/1147688.htm kan hjelpe deg: sjekke om roten er null, så pass på venstre og høyre noder som parametre inn i funksjonen.

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. Tiden kompleksitet for beste fall er O (nlogn) hvor n er antallet noder for å sette inn. Det verste tilfellet er O (n). Det er direkte lineær.

Hvis du har andre spørsmål bare google det, det er nok av ting å vite om binære søketrær. Men det meste av det er rett og slett rekursjon at du kan lære på 30 sekunder.

Jeg håper dette hjelper. Lykke til på eksamen! Jeg hadde mine for noen måneder siden. ;)

Svarte 24/05/2011 kl. 17:39
kilden bruker

stemmer
1

  • Det maksimale antall blader er ceil (n / 2). Det minste antall er 1
  • Den maksimale høyde er n. Den minste er gulvet (log_2 (n))
Svarte 24/05/2011 kl. 17:44
kilden bruker

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