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

проверка на сбалансированность - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Lonter
1 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 45
09.05.2013, 12:32     проверка на сбалансированность #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
82
83
84
85
86
87
88
89
#include <stdio.h>
#include <conio.h>
 
struct node // Структура узла
{
int info ; 
int c ; 
node *ll,
*rl ; 
} ;
 
node *tree( node *p, int w );
 
void treeprint (node *p);
 
int tree_find (node *p);
 
int podschet( node *p);
 
void main ( )
{ 
    node *root; 
    int w, max, n; 
    FILE *rf;
    rf= fopen("in.txt", "r");
    root = NULL; 
    fscanf (rf, "%d", &w);
    while ( !feof ( rf ))
    { 
        root = tree ( root, w );
        fscanf(rf, "%d", &w);
    }
    treeprint(root);
    max = tree_find(root);
    printf("max = %d", max);
    n=podschet(root);
    printf("\nn = %d", n);
    getch();
}
 
node *tree(node *p, int w)
{
    if (p == NULL)
    { 
        p = new node;
        p->info = w;
        p->ll = NULL;
        p->rl = NULL;
        p->c = 1;
    }
    else
        if (w == p->info)
            p->c = p->c + 1; 
        else
            if (w < p -> info)
                p->ll = tree (p->ll, w);
            else 
                p->rl = tree (p->rl, w); 
    return p;
}
 
void treeprint (node *p)
{
    if (p!=NULL)
    {
        treeprint(p->ll); 
        printf("%d\t%d\n", p->c, p->info);
        treeprint(p->rl); 
    } 
}
 
int tree_find (node *p)
{
    if(p->rl!=NULL)
        return tree_find (p->rl);
    else
        return p->info;
}
 
int podschet( node *p)
{
    int n=0;
    while(p!=NULL)
    {
        p=p->rl;
        n++;
    }
    return n;
}
Добавлено через 19 часов 10 минут
пожалуууууйста))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 12:32     проверка на сбалансированность
Посмотрите здесь:

C++ Проверка!
C++ Проверка значения
C++ Проверка чисел
проверка C++
Проверка с if C++
C++ Проверка if
C++ Проверка
С++ проверка C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
10.05.2013, 12:50     проверка на сбалансированность #2
Что-то типа этого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cmath>
 
int check( node *h )
{
    if ( h == 0 ) return 1;
 
    int l = check( h->left );
    int r = check( h->right );
 
    if ( l == 0 || r == 0 ) return 0;
    if ( std::abs( l - r ) > 1 ) return 0;
    return ( l + r + 1 ) / 2 + 1;
}
Проверяет сбалансированность как в АВЛ-дереве, где высота поддеревьев может отличаться на 1.
Если функция вернет 0, то дерево не сбалансировано.
Корректность работы функции не проверял
Yandex
Объявления
10.05.2013, 12:50     проверка на сбалансированность
Ответ Создать тему
Опции темы

Текущее время: 12:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru