Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

АВЛ-дерево - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как можно улучшить данную программу "Тест". http://www.cyberforum.ru/cpp-beginners/thread1197544.html
Здравствуйте!!!!!! Эта программа "тест".Как думаете, что еще можно задействовать в этой программе???Как можно усовершенствовать? Может добавить функцию какую... #include "stdafx.h" #include...
C++ Из массива в целое число Есть вектор vector<byte> byte - unsigned char приходи 4 байта.т.е. в векторе 4 элемента и мне надо получить из них int. http://www.cyberforum.ru/cpp-beginners/thread1197535.html
C++ Дан массив из N вещественных чисел двойной точности. Найти максимальное отрицательное число из данного массива
Дан массив из N вещественных чисел двойной точности. Найти максимальное отрицательное число из данного массива. Если отрицательные числа в массиве отсутствуют, вывести 0
C++ Почему возникает ошибка? error: ambiguous overload for 'operator>>'
class planet { protected: double distance; int revolve; public: planet(double d, int r) {distance=d; revolve=r;} }; class earth12: public planet { double circumference;...
C++ Автоматизация создания указателей http://www.cyberforum.ru/cpp-beginners/thread1197513.html
Возможно ли создать цикл для автоматического создания указателей, к примеру мне нужно создать 1000 указателей с именами указатель1, указатель2, указатель3... указатель1000 FILE *outfile1;...
C++ Из диапазона целых чисел выделить множество чисел, делящихся без остатка на заданное число. Помогите!!! Из диапазона целых чисел m ... n выделить: 1) множество чисел, делящихся без остатка или на k, или на l (k, l – про-стые); 2) множество чисел, делящихся на k • l без остатка. подробнее

Показать сообщение отдельно
Pavel_2011
1 / 1 / 0
Регистрация: 23.10.2013
Сообщений: 66

АВЛ-дерево - C++

03.06.2014, 12:00. Просмотров 1704. Ответов 1
Метки (Все метки)

Из входной последовательности символов построить АВЛ-дерево без повторов. Найти в нем узел, относительно которого будет максимальная разница количества элементов в левом и правом поддеревьях. Вывести значение этого узла и количество элементов в левом и правом поддеревьях.

Я написал код ввода, вывод, удаление, но не могу написать остальные ф-ции. Напишите, кто знает. Буду благодарен

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
using namespace std;
struct node    // описание узла
{
    int info;   // информационное поле
    node *left; // указатель на левое поддерево
    node *right; // указатель на правое поддерево
};
 
node * create(int d) // формирование нового элемента дерева
{
    node *p = new node;  // выделение памяти под новый узел
    p->info = d;
    p->left = NULL;    // слева нет потомков 
    p->right = NULL;   // справа нет потомков
    return p;
}
void  insert(node **p, int d) // добавление узла в дерево поиска
{
    if (*p == NULL) *p = create(d);
    else
    {
        if (d<(*p)->info)//если d меньше значения в узле - идем влево
            // если там нет узла - создаем
        if (&(*p)->left == NULL) (*p)->left = create(d);
        else //если узел есть, вызываем вставку в левую ветвь
            insert(&(*p)->left, d);
        if (d>(*p)->info)//если d больше значения в узле, идем вправо
            //если там нет узла – создаем новый узел
        if (&(*p)->right == NULL) (*p)->right = create(d);
        else //если узел есть, вызываем вставку в правую ветвь
            insert(&(*p)->right, d);
    }
}
 
// распечатка дерева в симметричном порядке
void printsim(const node * p)
{
    if (p != NULL)   //  если дерево не пусто
    {
        printsim(p->left);   //  печатаем левое поддерево     
        cout << p->info << "  ";  // печатаем значение текущего узла
        printsim(p->right);  //  печатаем правое поддерево
    }
}
// распечатка дерева в прямом порядке
void printpr(const node * p)
{
    if (p != NULL)   //  если дерево не пусто
    {
        cout << p->info << "  ";  // печатаем значение текущего 
        printpr(p->left);   //  печатаем левое поддерево     
        printpr(p->right);  //  печатаем правое поддерево
    }
}
 
// распечатка дерева в обратном порядке
void printobrat(const node * p)
{
    if (p != NULL)   //  если дерево не пусто
    {
        printobrat(p->left);   //  печатаем левое поддерево     
        printobrat(p->right);  //  печатаем правое поддерево
        cout << p->info << "  ";  // печатаем значение текущего 
            
    }
}
 
 
 
 
void clear(node **p)     // очистка дерева
{
    if ((*p) != NULL)           //  если дерево не пусто
    {
        clear(&(*p)->left);   //  удаляем левое поддерево     
        clear(&(*p)->right);  //  удаляем правое поддерево    
        delete *p; //Удаляем указатель на текущий узел
        *p = NULL;//Присваиваем ему пустой указатель
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru