Двоичное дерево: различия между версиями
[непроверенная версия] | [непроверенная версия] |
→Применение: Убрал ещё одну родительскую категорию - Категория:Теория графов |
м "...левый и правым сыновьями.", орфография |
||
Строка 1: | Строка 1: | ||
'''Двои́чное де́рево''' — [[Дерево (теория графов)|древовидная]] [[структура данных]], в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются |
'''Двои́чное де́рево''' — [[Дерево (теория графов)|древовидная]] [[структура данных]], в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются левым и правым сыновьями. |
||
Для практических целей, обычно, используют два подвида бинарных деревев - [[двоичное дерево поиска]] и [[двоичная куча]]. |
Для практических целей, обычно, используют два подвида бинарных деревев - [[двоичное дерево поиска]] и [[двоичная куча]]. |
Версия от 15:50, 28 октября 2009
Двои́чное де́рево — древовидная структура данных, в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются левым и правым сыновьями.
Для практических целей, обычно, используют два подвида бинарных деревев - двоичное дерево поиска и двоичная куча.
Рекурсивное определение
Существует следующее рекурсивное определение двоичного дерева (см. БНФ):
<дерево> ::= ( <данные> <дерево> <дерево> ) | nil .
То есть двоичное дерево либо является пустым, либо состоит из данных и двух поддеревьев (каждое из которых может быть пустым). Очевидным, но важным для понимания фактом является то, что каждое поддерево в свою очередь тоже является деревом. Если у некоторого узла оба поддерева пустые, то он называется листовым узлом (листовой вершиной).
Например, показанное справа на рис. 1 дерево, согласно этой грамматике можно было бы записать так:
(m (e (c (a nil nil) nil ) (g nil (k nil nil) ) ) (s (p (o nil nil) (s nil nil) ) (y nil nil) ) ) |
Каждый узел в дереве задаёт поддерево, корнем которого он является. У вершины n=(data, left, right) есть два ребёнка (левый и правый) left и right и, соответственно, два поддерева (левое и правое) с корнями left и right.
Применение
Многие полезные структуры данных основаны на двоичном дереве: