72 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| title: Trees
 | ||
| localeTitle: деревья
 | ||
| ---
 | ||
| # деревья
 | ||
| 
 | ||
| Структура данных дерева может быть определена рекурсивно (локально) в виде набора узлов (начиная с корневого узла), где каждый узел представляет собой структуру данных, состоящую из значения, вместе со списком ссылок на узлы («дети») , с ограничениями, которые не дублируются ссылкой, и ни один не указывает на корень. Дерево без узлов называется нулевым или пустым деревом.
 | ||
| 
 | ||
| Бинарное дерево представляет собой нелинейную структуру данных, состоящую из узлов, где каждый узел имеет следующие 3 компонента:
 | ||
| 
 | ||
| **Элемент данных** : хранит любые данные в узле **Левый указатель** : указывает на поддеревье в левой части узла **Правильный указатель** : указывает на поддерево справа от узла Как следует из названия, элемент данных хранит любые данные в узле. Левый и правый указатели указывают на двоичные деревья с левой и правой стороны узла соответственно.
 | ||
| 
 | ||
| Если дерево пустое, оно представлено нулевым указателем.
 | ||
| 
 | ||
| ## Терминология, используемая в деревьях:
 | ||
| 
 | ||
| **Корень** : Верхний узел в дереве.
 | ||
| 
 | ||
| **Ребенок** : Узел, напрямую подключенный к другому узлу при удалении от корня.
 | ||
| 
 | ||
| **Родитель** : Обратное понятие ребенка.
 | ||
| 
 | ||
| **Братья и сестры** : Группа узлов с одним и тем же родителем.
 | ||
| 
 | ||
| **Потомок** : Узлы достижимы путем повторного прохождения от родителя к дочернему.
 | ||
| 
 | ||
| **Предки** : Узел, доступный путем повторного прохождения от дочернего к родительскому.
 | ||
| 
 | ||
| **Ветвь** (внутренний узел): Узел дерева с дочерними узлами.
 | ||
| 
 | ||
| **Лист** (обычно называемый внешним узлом): Узел без детей.
 | ||
| 
 | ||
| **Степень** : Количество поддеревьев узла.
 | ||
| 
 | ||
| **Край** : Связь между одним узлом и другим.
 | ||
| 
 | ||
| **Путь** : Последовательность узлов и ребер, соединяющих узел с потомком.
 | ||
| 
 | ||
| **Уровень** : Уровень узла определяется 1 + (количество соединений между узлом и корнем).
 | ||
| 
 | ||
| **Высота дерева** : Высота дерева - это высота его корневого узла.
 | ||
| 
 | ||
| **Глубина** : Глубина узла - это количество ребер от корневого узла дерева до узла.
 | ||
| 
 | ||
| **Лес** : Лес представляет собой набор из n ≥ 0 непересекающихся деревьев.
 | ||
| 
 | ||
| ### Некоторые популярные типы деревьев:
 | ||
| 
 | ||
| *   Двоичное дерево
 | ||
| *   Двоичное дерево поиска
 | ||
| *   Дерево AVL
 | ||
| *   Красный Черный Дерево
 | ||
| *   Splay Tree
 | ||
| *   Дерево Хаффмана
 | ||
| 
 | ||
| ### Общее использование
 | ||
| 
 | ||
| *   Представление иерархических данных
 | ||
| *   Хранение данных таким образом, чтобы он был легко доступен для поиска
 | ||
| *   Представление отсортированных списков данных
 | ||
| *   Алгоритмы маршрутизации
 | ||
| 
 | ||
| ### Код узла дерева
 | ||
| 
 | ||
| \`\` \`c\_cpp узел структуры { int данные; // Элемент данных struct node \* left; // Указатель на левый узел struct node \* right; // Указатель на правый узел };
 | ||
| 
 | ||
| \`\` \`
 | ||
| 
 | ||
| #### Дополнительная информация:
 | ||
| 
 | ||
| *   [Уроки урока CMU](http://www.cs.cmu.edu/~clo/www/CMU/DataStructures/Lessons/lesson4_1.htm)
 | ||
| *   [Википедия](https://en.wikipedia.org/wiki/Tree_(data_structure)) |