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

Программа на Бинарное дерево - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Помогите написать программу по последовательности чисел, не пойму смысл задачи http://www.cyberforum.ru/cpp-beginners/thread383523.html
1. Вводится последовательность целых чисел, 0 – конец последовательности. Для каждого числа последовательности найти количество его делителей (функцией оформить определение количества делителей числа).
C++ массив min #include <iostream.h> #include <stdio.h> #include <conio.h> int main() { randomize(); int a; int b=0; int max=a; int min=a; http://www.cyberforum.ru/cpp-beginners/thread383498.html
Книги по WinApi C++
Посоветуйти Книги по WinApi для С++ ??? Просто од нашол книгу а ее нет в продаже в моем городе Юрий Щупак, Win32 API. Эффективная разработка приложений. посоветуйте что то еше???
C++ Написать программу, которая определяет строку квадратной матрицы.
Написать программу, которая определяет строку квадратной матрицы размером 3х3, сумма элементов которой максимальна. Использовать средства ввода\вывода языка С.
C++ Определить количество выигранных и проигранных матчей http://www.cyberforum.ru/cpp-beginners/thread383476.html
Помогите! a) Статическая память. Двумерный массив. Дан массив из 2 строк и 22 столбцов. В 1-ой строке информация о забитых мячах команды за матч, во 2-ой о пропущенных мячах. Определить количество выигранных и проигранных матчей. b) Динамическая память. Одномерный массив. Дан массив вещественных чисел. Правда ли, что величина максимального элемента в два раза больше минимального.
C++ Шаблон класса вектор template <class T> class Vector { public: //? int size; T* data; public: Vector(int); int Size(); T& operator (int); подробнее

Показать сообщение отдельно
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
14.11.2011, 17:17     Программа на Бинарное дерево
Цитата Сообщение от cooller51190555 Посмотреть сообщение
1. Бинарное дерево задано указателем на корень. Информационные поля узлов, входящих в состав де-рева, имеют тип int. Необходимо создать список, хранящий в порядке возрастания целые числа, заданные в листьях дерева.
2.Бинарное дерево, содержащее совокупность целых чисел, задано указателем на корень. Требуется сосчитать количество уровней в дереве и количество отдельных узлов в каждом из уровней. Результаты рас-чета оформить в виде таблицы из двух граф: «Номер уровня» и «Количество узлов в уровне».
3.Бинарное дерево задано указателем на корень. Необходимо, осуществляя обход дерева, построить два списка и заполнить их соответственно четными и нечетными числами из множества целых чисел, хра-нимых в дереве.
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <stdio.h>
 
/* ==================== binary tree ==================== */
 
typedef int T;
typedef struct tnode *Treeptr;
#define cmp(a, b) ((a) <= (b))
 
typedef struct tnode { 
    T data;
    Treeptr left; 
    Treeptr right; 
} Treenode;
 
Treeptr talloc(void);
 
Treeptr addtree(Treeptr p, T data)
{
    if (p == NULL) {   
        p = talloc();
        p->data = data;
        p->left = p->right = NULL;
    } else if (cmp(data, p->data))
        p->left = addtree(p->left, data);
    else             
        p->right = addtree(p->right, data);
    return p;
}
 
#include <stdlib.h>
 
Treeptr talloc(void)
{
    return (Treeptr) malloc(sizeof(Treenode));
}
 
void traversal(Treeptr p, void (*visit)(T))
{
    if (p != NULL) {
        traversal(p->left, visit);
        visit(p->data);
        traversal(p->right, visit);
    }
}
 
void deltree(Treeptr p)
{
    if (p != NULL) {
        free(p->left);
        free(p->right);
        free(p);
    }
}
 
void treeprint(Treeptr p, char *fmt)
{
    if (p != NULL) {
        treeprint(p->left, fmt);
        printf(fmt, p->data);
        treeprint(p->right, fmt);
    }
}
/* ================ end of binary tree ================= */
 
#define MAXDEPTH  100
 
int depth = 0; 
int table[MAXDEPTH];
 
void count_nodes(Treeptr p)
{
    if (p != NULL) {
        if (depth < MAXDEPTH)
            table[depth]++;
        depth++;
        count_nodes(p->left);
        count_nodes(p->right);
        depth--;
    }
}
 
#define MAXSIZE  100
 
int even[MAXSIZE], *peven = even;
int odd[MAXSIZE], *podd = odd;
 
void process_number(int n)
{
    if (n & 1) {
        if (podd < odd + MAXSIZE)
            *podd++ = n;
    } else if (peven < even + MAXSIZE)
        *peven++ = n;
}           
 
int main()
{
    Treeptr root = NULL;
    int n, *p;
 
    while (printf("enter a number (0 to stop):\n") > 0
                && scanf("%d", &n) == 1 && n)
        root = addtree(root, n);
    putchar('\n');
    treeprint(root, "%d ");
 
    count_nodes(root);
    printf("\n\n");
    for (n = 0; table[n] != 0; n++) 
        printf("depth: %d, number of nodes: %d\n", n, table[n]);
 
    traversal(root, process_number);
    for (printf("\neven: "), p = even; p != peven; p++)
        printf("%d ", *p);
    for (printf("\nodd:  "), p = odd; p != podd; p++)
        printf("%d ", *p);
    putchar('\n');
 
    deltree(root);
    return 0;
}
дерево:
Код
	 (8)
        /   \    
       /     \
     (4)     (12)
    /       /    \
  (2)     (10)    (15) 
 /   \    /  \       \ 
(1) (3)  (9) (11)    (16)
пример работы
Код
enter a number (0 to stop):
8
enter a number (0 to stop):
4
enter a number (0 to stop):
12
enter a number (0 to stop):
2
enter a number (0 to stop):
10
enter a number (0 to stop):
15
enter a number (0 to stop):
1
enter a number (0 to stop):
3
enter a number (0 to stop):
9
enter a number (0 to stop):
11
enter a number (0 to stop):
16
enter a number (0 to stop):
0

1 2 3 4 8 9 10 11 12 15 16

depth: 0, number of nodes: 1
depth: 1, number of nodes: 2
depth: 2, number of nodes: 3
depth: 3, number of nodes: 5

even: 2 4 8 10 12 16
odd:  1 3 9 11 15
Press any key to continue . . .
 
Текущее время: 19:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru