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