Читайте также: |
|
a[1],…,a[r] на две части a[1],…,a[m] и
a[m+1],…,a[r], строит турниры для двух частей (рекурсивно) и создает турнир для всего массива, связывая новый узел с рекурсивно построенными турнирами и помещая в него копию большего элемента в корнях двух рекурсивно построенных турниров.
Struct node
{
Item item; node *i, *r;
Node (Item x)
{
item = x; l = 0; r = 0;
|
};
typedef node* link;
link max (Item a[], int i, int r)
{
int m = (l+r)/2;
link x = new node(a[m]);
if (l = = r) return x;
x->1 = max(a, l, m);
x->r = max(a, m+1, r);
Item u = x->1->item, v = x->r->item;
If (u>v)
x->item = u; else x->item = v;
return x;
}
На рисунке 5.30 приведен пример явной структуры дерева, построенной программой 5.19.
Построение таких рекурсивных структур – вероятно, предпочтительней отысканию максимума путем просмотра данных, поскольку структура дерева обеспечивает определенную гибкость для выполнения других операций. Важным примером служит и сама операция, использованная для построения турнира. При наличии двух турниров их можно объединить в один турнир, создав новый узел, левая связь которого указывает на один турнир, а правая – на другой, и приняв больший из двух элементов (помещенных в корнях двух данных турниров) в качестве наибольшего элемента объединенного турнира.
Рисунок 5.30. Явное дерево для отыскания максимума (турнир).
На этом рисунке отображена структура дерева, сконструированная программой 5.19 на основании ввода элементов AMPLE. Элементы данных помещаются в листьях. Каждый внутренний узел содержит копию большего из элементов в двух дочерних узлах, следовательно, в соответствии с методом индукции наибольшим элементом является корень.
Вторым примером программы создания бинарного дерева служит измененная версия программы оценки префиксного выражения, которая создает дерево, представляющее префиксное выражение, а не просто оценивает его (рис. 5.31) В программе 5.20 используется та же рекурсивная схема, но рекурсивная функция возвращает ссылку на дерево, а не на значение. Программа создает новый узел дерева для каждого символа в выражении: узлы, которые соответствуют операциям, имеют связи со своими операндами, а узлы листьев содержат переменные (или константы), которые являются входными данными выражения.
Дата добавления: 2015-07-26; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Обход деревьев. | | | Биогеоценоз. |