Я предполагаю, что вы либо кодирования в C или C ++.
а. Узел, если структура определена следующим образом: структура узла {STRUCT узла * влево, вправо *; }; Вы можете заметить, что структура может либо иметь 0, 1 или 2 листьев. Таким образом, максимум 2, мин составляет 0 листьев.
Высота b.Minimal равна нулю, в котором будет содержать только корневой узел. Обратите внимание, что корневой узел не считается высотой 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
с. Простите меня , если я беру это на worng путь, но я предполагаю , что , если мы нанесем это на листе бумаги, мы бы пытаться найти количество «ссылок» , которые мы могли бы использовать? В этом случае, было бы просто количество узлов в дереве -1 для корневого узла. Этот алгоритм нашел на этой странице http://forums.techarena.in/software-development/1147688.htm может помочь вам: проверить , если корень имеет нулевое значение, а затем передать левые и правые узлы в качестве параметров в функцию.
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;
д. Временная сложность для лучшего случая представляет собой О (NlogN) где п числа узлов для вставки. Худший случай, представляет собой О (п). Это непосредственно линейно.
Если у вас есть какие-либо другие вопросы, только Google это, есть много вещей, чтобы знать о бинарных деревьев поиска. Но большинство из них просто рекурсии, что вы можете узнать в течение 30 секунд.
Надеюсь, это поможет. Удачи на экзамене! У меня было мое несколько месяцев назад. ;)