Двоичное дерево

голоса
0

Мой профессор опубликовал некоторые вопросы обзора для окончательного экзамена. И я не могу найти ответы на него. Любая помощь будет оценена!

Рассмотрим бинарное дерево из п узлов:
а. Какое минимальное и максимальное количество конечных узлов?
б. Какое минимальное и максимальное значение высоты?
с. Сколько указателей используются дерево (не считая нулевых указателей, и предполагая , что мы не храним поле , которое хранит родителей)?

* D. Что самое худшее уход за время работы для вставки п узлов в (первоначально пустой) двоичное дерево поиска?

Задан 24/05/2011 в 18:27
источник пользователем
На других языках...                            


4 ответов

голоса
0

Попробуйте нарисовать различные деревья на бумаге и посмотреть, что получится. Напомним, что бинарное дерево определяется как дерево, где каждый узел может иметь 0 (в этом случае оно является листом), 1 или 2 детей. Для вашего вопроса, вы должны изучить очень несбалансированный случай 1 ребенка на узел.

Ответил 24/05/2011 в 18:31
источник пользователем

голоса
0

Рассматривать:

Если вы пытаетесь увеличить количество листьев, вы хотите, как несколько внутренних узлов, как это возможно (и наоборот, если вы пытаетесь свести к минимуму количество листьев). Как вы можете сделать это?

Для того, чтобы получить дерево максимальной высоты, вы будете ставить в несколько узлов на каждом уровне, как это возможно. Как вы можете это сделать? С другой стороны, для минимальной высоты, что максимальное количество узлов, вы можете положить на каждом уровне?

Сколько существует способов, чтобы добраться до каждого узла дерева? Таким образом, сколько указателей вам нужно?

Ответил 24/05/2011 в 18:33
источник пользователем

голоса
0

Я предполагаю, что вы либо кодирования в 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 секунд.

Надеюсь, это поможет. Удачи на экзамене! У меня было мое несколько месяцев назад. ;)

Ответил 24/05/2011 в 18:39
источник пользователем

голоса
1

  • Максимальное количество листьев CEIL (п / 2). Минимальное число равно 1
  • Максимальная высота равна п. Минимум этаж (log_2 (п))
Ответил 24/05/2011 в 18:44
источник пользователем

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