- •Елементи мови с.Основні символи
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Лексеми
- •Коментарі
- •Умовні оператори. Логічні вирази
- •Форми оператора if
- •Оператор вибору switch
- •Перерахування типів
- •Перетворення типів
- •Оператори циклу
- •Оператор while
- •Оператор for
- •Оператор do-while
- •Оператори переходу
- •Cтруктури
- •Об'єднання (суміші)
- •Робота з структурами.
- •Ініціалізація структур
- •Робота з обєднаннями
- •Визначення об'єктів та типів
- •Методи доступу до елементів масивів
- •Покажчики на багатовимірні масиви
- •Операції з вказівниками
- •Робота з покажчиками.
- •Покажчики на структуру
- •Масиви структур
- •Динамічне розміщення масивів
- •Робота з динамічними масивами
- •Робота з непрямою адресацією
- •Робота з покажчиками як параметрами функцій
- •Використання вказівників
- •Операції з вказівниками
- •Використання вказівників в програмі
- •Робота з файлами
- •Відкриття файлу
- •Обробка відкритого файлу
- •Перевірка ознаки кінця файлу
- •Закриття файлу
- •Функції введення-виведення
- •Робота з текстовими файлами
- •Функція форматованого виведення printf ()
- •Основні формати
- •Модифікації форматів
- •Функція форматованого введення scanf ()
- •Робота функції scanf ()
- •Призначеня функцій бібліотеки введення-виведення
- •Макрокоманди
- •Потокові інтерфейси введення-виведення
- •Ближні покажчики (near)
- •Дальні покажчики (far)
- •Покажчики huge
- •Функції для роботи з рядками
- •Динамічні рядки, клас string
- •Визначення поточної робочої директорії
- •Визначення поточного каталогу диска
- •Визначення / встановленн поточного диска
- •Пошук файлу
- •Створення, видалення, зміна директорій
- •Приклад програми для роботи з директоріями
- •Перегляд каталогу диска
- •Параметри структури ffblk
- •Робота з клавіатурою
- •Робота з файлами
- •Послідовний доступ до елементів двійкових файлів
- •Організація довільного доступу до елементів двійкових файлів
- •Робота динамічних структур даних.
- •Функції управління пам'яттю
- •Атрибути файлів.
- •Параметри
- •Динамічні структури даніх
- •Лінійні списки
- •Стек. Загальні поняття.
- •Приклад використання стеку
- •Основні визначення
- •Приклад використання дерев
Приклад використання дерев
#pragma once
template <class T>
class Tree
{
struct Node
{
T item;
Node *son;
Node *brother;
Node(T i, Node *s = NULL, Node *b = NULL)
{
item = i;
son = s;
brother = b;
}
};
Node *root;
public:
Tree()
{
root = NULL;
}
~Tree()
{
DeleteSubtree(root);
}
int GetHeight()
{
return GetHeight(root);
}
int GetNodesOnLevel(int level)
{
return GetNodesOnLevel(root, level);
}
void Add(const T &elem)
{
Add(root, elem);
}
private:
void Add(Node *&node, const T &elem);
void DeleteSubtree(Node *node);
int GetHeight(Node *node);
int GetNodesOnLevel(Node *node, int level);
};
template <class T>
void Tree<T>::DeleteSubtree(Node *node)
{
if (node)
{
DeleteSubtree(node->son);
DeleteSubtree(node->brother);
delete node;
}}
template <class T>
int Tree<T>::GetHeight(Node *node)
{
if (node == NULL)
{ return 0; }
int max = 0;
for (Node *current = node->son; current; current = current->brother)
{ int curHeight = GetHeight(current);
if (curHeight > max)
{
max = curHeight;
} }
return max + 1;}
template <class T>
int Tree<T>::GetNodesOnLevel(Node *node, int level)
{
if (node == NULL)
{
return 0;
}
if (level <= 0)
{
return 0;
}
return GetNodesOnLevel(node->son, level - 1) + (level == 1) +
GetNodesOnLevel(node->brother, level);
}
template <class T>
void Tree<T>::Add(Node *&node, const T &item)
{
if (node == NULL)
{
node = new Node(item);
}
else if (item < node->item)
{
Add(node->son, item);
}
else
{
Add(node->brother, item);
}}
include "iostream"
#include "tree.h"
using namespace std;
int main()
{
setlocale(0,"");
Tree<int> tree;
int n, lev, item;
cout << "Введіть кількість елементів в дереві: ";
cin >> n;
cout << endl;
cout << "Введть елементи дерева: ";
for (int i = 0; i < n; i++)
{
cin >> item;
tree.Add(item);
}
cout << endl;
cout << "Висота дерева: " << tree.GetHeight()<< endl;
cout << "Введіть номер рівня на якому потрібно знати кількість вузлів: ";
cin >> lev;
cout << endl;
Питання для контролю:
Що таке дерева?
Що таке кореневе дерево в мові С?
Що таке бінарне дерево?
Що таке вершина дерева?
Література:
1. Д. Рассохин, “От С к С++” , Москва, “Едель” 2003 г., с. 484- 493
