mafulechka
23 мая 2019 г. 12:49

Древовидная структура данных

Связанный список - это цепочка узлов, соединенных через «next» указатели. Дерево похоже на связанный список, но каждый узел может быть связан с несколькими узлами.

Когда мы говорим о дереве, в основном мы имеем в виду двоичное дерево, то есть структуру, которая имеет два дочерних элемента, слева и справа.


Представление двоичного дерева

Узел двоичного дерева представлен структурой, содержащей часть данных и два указателя на другие структуры того же типа.

  1. struct node
  2. {
  3. int data;
  4. struct node *left;
  5. struct node *right;
  6. };

Специальный указатель, называемый ROOT указывает на узел, который является родителем всех других узлов.

Кроме того, узлы, у которых нет дочерних элементов, имеют свои левый и правый указатели, указывающие на NULL .

Базовое двоичное дерево с тремя узлами может быть создано так:

  1. /* Initialize nodes */
  2. struct node *root;
  3. struct node *one = NULL;
  4. struct node *two = NULL;
  5. struct node *three = NULL;
  6.  
  7. /* Allocate memory */
  8. one = malloc(sizeof(struct node));
  9. two = malloc(sizeof(struct node));
  10. three = malloc(sizeof(struct node));
  11.  
  12. /* Assign data values */
  13. one->data = 1;
  14. two->data = 2;
  15. three->data = 3;
  16.  
  17. /* Connect nodes */
  18. one->left = two;
  19. one->right = three;
  20. two->left = NULL;
  21. two->right = NULL;
  22. three->left = NULL;
  23. three->right = NULL;
  24.  
  25. /* Save address of first node in root */
  26. root = one;

Всего за несколько шагов мы создали двоичное дерево с тремя узлами.

Деревья могут быть намного более глубокими и сложными, чем это. Данные, хранящиеся в каждом узле, могут быть более сложными, и иметь гораздо больше дочерних элементов, нежели два.

Применение деревьев

Деревья и их варианты представляют собой чрезвычайно полезную структуру данных со множеством практических применений.

  • Деревья двоичного поиска (BST) используются для быстрой проверки наличия элемента в наборе.
  • Heap (Множество) - это вид дерева, который используется для сортировки множества элементов.
  • Модифицированная версия дерева под названием Tries используется в современных маршрутизаторах для хранения информации о маршрутизации.
  • Самые популярные базы данных используют B-Trees (B-деревья) и T-Trees (T-деревья), которые являются вариантами древовидной структуры, которую мы изучили выше для хранения своих данных.
  • Компиляторы используют синтаксическое дерево для проверки (подтверждения) синтаксиса каждой написанной вами программы.

Полная программа C для реализации Tree

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct node {
  5. int data;
  6. struct node* left;
  7. struct node* right;
  8. };
  9.  
  10. struct node* createNode(value){
  11. struct node* newNode = malloc(sizeof(struct node));
  12. newNode->data = value;
  13. newNode->left = NULL;
  14. newNode->right = NULL;
  15.  
  16. return newNode;
  17. }
  18.  
  19. struct node* insertLeft(struct node *root, int value) {
  20. root->left = createNode(value);
  21. return root->left;
  22. }
  23.  
  24.  
  25. struct node* insertRight(struct node *root, int value){
  26. root->right = createNode(value);
  27. return root->right;
  28. }
  29.  
  30. int main(){
  31. struct node *root = createNode(1);
  32. insertLeft(root, 2);
  33. insertRight(root, 3);
  34.  
  35. printf("The elements of tree are %d %d %d", root->data, root->left->data, root->right->data);
  36. }

Вывод программы

1 2 3

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь