Binární vyhledávací strom

hlasů
0

Můj profesor vyslán nějaké recenzi otázek pro závěrečné zkoušky. A nemůžu to najít odpovědi na to. Jakákoliv pomoc bude velmi ocenil!

Vezměme si binární strom sn uzly:
a. Jaká je minimální a maximální počet listových uzlů?
b. Jaká je minimální a maximální hodnota výšky?
C. Kolik ukazatele se používají u stromu (nepočítáme ukazatele null, a za předpokladu, nebudeme držet pole, které ukládá rodiče)?

* D. Co je nejhorší péče běží čas pro vložení n uzly do (původně prázdného) binárního vyhledávacího stromu?

Položena 24/05/2011 v 18:27
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
0

Pokusit se malovat různé stromy na papír a vidět to, co dostanete. Uvědomte si, že binární strom je definován jako strom, kde může mít každý uzel 0 (v tomto případě se jedná o list), 1 nebo 2 děti. Pro vaši otázku je třeba zkoumat velmi nevyvážený případ 1 dítě na uzlu.

Odpovězeno 24/05/2011 v 18:31
zdroj uživatelem

hlasů
0

Zvážit:

Pokud se snažíte, aby se maximalizoval počet listů, který chcete použít jako málo vnitřních uzlů je možné (a zpětného chodu, pokud se snažíte, aby se minimalizoval počet listů). Jak můžete dokázat, že?

Chcete-li získat strom maximální výšky, budete dát co nejméně uzly v každé úrovni, jak je to možné. Jak to můžete udělat? Naopak, pro minimální výšky, jaká je maximální počet uzlů můžete umístit na každé úrovni?

Kolika způsoby se tam dostat do každého uzlu stromu? To znamená, kolik ukazatelů potřebujete?

Odpovězeno 24/05/2011 v 18:33
zdroj uživatelem

hlasů
0

Jsem za předpokladu, že jste buď kódování v C nebo C ++.

A. Uzel, v případě, že struktura je definována takto: struct uzel {struct uzel * vlevo, vpravo *; }; Můžete pozorovat, že struktura může mít buď 0, 1 nebo 2 listy. Ano, max je 2 min je 0 listy.

výška b.Minimal je nula, ve které by obsahovat pouze kořenový uzel. Všimněte si, že kořen nepočítá jako výšky 1. To je také nazýván hloubka občas. Zde je algoritmus pro výšku:

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

Čtěte více: http://wiki.answers.com/Q/How_do_you_find_out_the_height_of_a_Binary_Search_Tree#ixzz1NIB17SkL

C. Omluvte mě, jestli jsem si to na worng cestu, ale já jsem za předpokladu, že pokud budeme mapovány na to na kus papíru, bychom se snažit najít řadu „odkazů“, které bychom použili? V tom případě, že by prostě být počet uzlů ve stromu -1 pro kořenový uzel. Tento algoritmus nalézt na této stránce http://forums.techarena.in/software-development/1147688.htm vám může pomoci: zkontrolovat, zda kořen je null, pak se projít po levé a pravé uzly jako parametr do funkce.

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. Doba složitost pro nejlepším případě je O (nlogn), kde n je počet uzlů vložit. Nejhorší případ, je O (n). To je přímo lineární.

Máte-li jen google nějaké další otázky se, je tu spousta věcí, které vědět o binárních vyhledávacích stromů. Ale většina z nich je prostě rekurze, že se můžete naučit za 30 sekund.

Doufám, že to pomůže. Hodně štěstí na vaší zkoušku! Měl jsem dolu před několika měsíci. ;)

Odpovězeno 24/05/2011 v 18:39
zdroj uživatelem

hlasů
1

  • Maximální počet listů je ceil (N / 2). Minimální počet je 1
  • Maximální výška je n. Minimum je podlaha (log_2 (n))
Odpovězeno 24/05/2011 v 18:44
zdroj uživatelem

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