Я предполагаю, что вы либо пишете на C или C ++.
а. Узел, если структура определена так:
struct node {struct node * left, * right; };
Вы можете заметить, что структура может иметь 0, 1 или 2 листа. Таким образом, максимум равен 2, минимум равен 0 листьев.
b. Минимальная высота равна нулю, в которой будет содержаться только корневой узел. Обратите внимание, что корневой узел не считается высотой 1. Он также иногда называется глубиной.
Вот алгоритм для высоты:
int height(struct node *tree)
{
if (tree == NULL) return 0;
return 1 + max (height (tree->left), height (tree->right));
}
Подробнее: http://wiki.answers.com/Q/How_do_you_find_out_the_height_of_a_Binary_Search_Tree#ixzz1NIB17SkL
с. Извините, если я так поступлю, но я предполагаю, что если мы наметим это на листе бумаги, мы попытаемся найти количество «ссылок», которые мы будем использовать? В этом случае это будет просто число узлов в дереве -1 для корневого узла. Этот алгоритм, найденный на этой странице http://forums.techarena.in/software-development/1147688.htm, может помочь вам: проверьте, имеет ли root значение null, затем передайте левый и правый узлы в качестве параметров в функцию.
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;
д. Временная сложность в лучшем случае составляет O (nlogn), где n - количество вставляемых узлов. Худший случай - O (n). Это прямо линейно.
Если у вас есть другие вопросы, просто задайте их в Google, есть много вещей, которые нужно знать о бинарных деревьях поиска. Но в большинстве случаев это просто рекурсия, которую вы можете выучить за 30 секунд.
Надеюсь, это поможет. Удачи на экзамене! У меня был мой несколько месяцев назад. ;)