Bináris keresőfa

szavazat
0

Saját professzor írt néhány beszámolót kérdések a záróvizsga. És én nem úgy tűnik, hogy megtalálja a választ rá. Bármilyen segítség lesz nagyon méltányol!

Tekintsünk egy bináris fa n csomópont:
a. Mi a minimális és maximális számát szárcsomóknál?
b. Mi a minimális és a maximális érték a magasság?
c. Hány mutatókat használják a fa (nem számítva a null mutató, és feltételezve, hogy nem tartjuk olyan területen, amely tárolja a szülő)?

* D. Mi a legrosszabb ellátás működési idő behelyezésére n csomópontok egy (kezdetben üres) bináris keresési fa?

A kérdést 24/05/2011 18:27
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
0

Próbálja rajz különböző fák egy papírra, és mit kapsz. Vegye figyelembe, hogy egy bináris fa úgy definiáljuk, mint egy fa, ahol minden egyes csomópont lehet 0 (ebben az esetben ez egy levél), 1 vagy 2 gyermek. A kérdést meg kell vizsgálni a kiegyensúlyozatlan esetén 1 gyermek csomópont.

Válaszolt 24/05/2011 18:31
a forrás felhasználó

szavazat
0

Fontolgat:

Ha akarsz, hogy maximalizálja a levelek száma, szeretnénk a kevés belső csomópontok lehet (és fordítva, ha megpróbálja minimalizálni a levelek száma). Hogyan lehet elérni, hogy?

Ahhoz, hogy a fa a maximális magasságot, akkor tegye a néhány csomópont minden szinten lehetséges. Hogy tudod ezt megcsinálni? Ezzel szemben, a minimális magasság, mi az a maximális számú csomópont akkor tegye az egyes szinteken?

Hányféleképpen oda, hogy az egyes csomópontok egy fa? Így hány mutatókat van szüksége?

Válaszolt 24/05/2011 18:33
a forrás felhasználó

szavazat
0

Gondolom, te sem kódolás C vagy C ++ nyelven.

a. A csomópont, ha a szerkezet megadott, mint ez: struct csomópont {struct csomópont * balra, * jobbra; }; Meg lehet figyelni, hogy a szerkezet akár 0, 1 vagy 2 levelekkel. Tehát a max 2 perc 0 levelek.

b.Minimal magassága nulla, amelyben csak tartalmazza a gyökér. Megjegyezzük, hogy a gyökér nem számít a magassága 1 Ez is nevezik mélység időnként. Itt van egy algoritmust a magasság:

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

Bővebben: http://wiki.answers.com/Q/How_do_you_find_out_the_height_of_a_Binary_Search_Tree#ixzz1NIB17SkL

c. Bocsáss meg, ha ezt a worng módon, de felteszem, ha feltérképeztük ezt ki egy darab papírra, mi lenne, hogy kitalálja a szám a „kapcsolatok”, hogy mi lenne kezelhető? Ebben az esetben az lenne egyszerűen a csomópontok száma a fa -1 gyökér csomópontot. Ez az algoritmus megtalálsz http://forums.techarena.in/software-development/1147688.htm segítségével: ellenőrizze, hogy a gyökér null, akkor adja át a bal és a jobb csomópontok paramétereket a funkciót.

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. Időbonyolultsága legjobb esetben O (nlogn) ahol n a csomópontok száma beszúrni. A legrosszabb esetben, O (n). Ez közvetlenül lineáris.

Ha bármilyen további kérdése csak google, rengeteg dolgot kell tudni bináris keresés fák. De a legtöbb egyszerűen rekurzió hogy meg lehet tanulni 30 másodperc alatt.

Remélem ez segít. Sok szerencsét a vizsgádhoz! Volt az enyém néhány hónappal ezelőtt. ;)

Válaszolt 24/05/2011 18:39
a forrás felhasználó

szavazat
1

  • A maximális száma levelek ceil (n / 2). A minimális száma 1
  • A maximális magasság n. A minimum padló (log_2 (n))
Válaszolt 24/05/2011 18:44
a forrás felhasználó

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