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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Stan1994
11 / 11 / 1
Регистрация: 11.12.2011
Сообщений: 122
#1

Найти три минимальных элемента в дереве и массиве (Доработать код) - C++

16.01.2013, 08:34. Просмотров 324. Ответов 2
Метки нет (Все метки)

Ребята кто нибудь мог бы помочь с кодом на с++.
Я написал прогу которая ищет 3 минимальных элемента в дереве и массиве.
Если я в массиве задаю все отрицательные числа то прога вылетает.
А вот дерево нужно переделать: чтобы выводились не 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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <conio.h>
#include <iomanip>
 
using namespace std;
 
struct node
{
    int info;
    node *ll,*rl;
};
 
node *tree (node *p,int w);
void treeout( node *t, int level);
char menu();
void min_tree(node *t, int *a);
void min_mass(int *mass, int *a, int n);
 
 
void main()
{
    setlocale(LC_ALL,"");
    node *root;
    int w, *a_tree, *a_mass, *mas, n;
    char buf = '6';
    a_tree = new int[3];
    a_mass = new int[3];
    for (int i=0; i<3; i++)
    {
        a_mass[i] = a_tree[i] = INT_MAX;    
    }
    while (buf != '5')
    {
        buf = menu();
        switch(buf)
        {
            case '1':
                root=NULL;
                printf("Введите элементы дерева(по оканчанию ввода нажмите Ctrl+Z):");
                scanf("%d", &w);
                while (!feof(stdin))
                {
                    root = tree(root,w);
                    scanf("%d", &w);
                }
                break;
            case '2':
                printf("Введите количество элементов массива:\n");
                scanf ("%d", &n);
                printf("Введите элементы массива:\n");
                mas = new int [n];
                for (int i=0; i<n; i++)
                    scanf ("%d", &mas[i]);
                break;
            case '3':
                cout<<"\nДвоичное дерево:\n\n";
                treeout(root,0);
                getch();
                cout << endl;
                min_tree (root, a_tree);
                min_tree (root, a_tree);
                for (int i=0; i<3; i++)
                    cout << a_tree[i] << " " << endl;
                getch();
                break;
            case '4':
                cout<<"\nМассив:\n\n";
                for (int i=0; i<n; i++)
                    cout << mas[i] << " ";
                cout << endl;
                min_mass(mas, a_mass, n);
                for (int i=0; i<3; i++)
                    cout << a_mass[i] << " " << endl;
                break;
            case '5':
                break;
        }
    }
    
        
 
}
 
 
char menu() //функция создания меню
{
    char a; 
    printf ("Выберите нужный вариант:\n1 - Ввод данных в дерево\n2 - Ввод данных в массив\n3 - Обработка дерева\n4 - Обработка массива\n5 - Выход\n"); 
    a = getch(); //считываем символ
    return a; //возвращаем а (функция menu() принимает значение а, т.е строка buf_int = menu(); равнозначна buf_int = a)
}
 
void min_tree(node *t, int *a)
{
    if (t != NULL)
    {
        if (a[0] > t->info && a[1] != t->info && a[2] != t->info)
            a[0] = t->info;
        else if (a[1] > t->info && a[0] != t->info && a[2] != t->info)
            a[1] = t->info;
        else if (a[2] > t->info && a[1] != t->info && a[0] != t->info)
            a[2] = t->info;
        if (t->rl != NULL) min_tree(t->rl, a);
        if (t->ll != NULL) min_tree(t->ll, a); 
    }
}
 
node *tree (node *p,int w)
{
    if (p==NULL)
    {
        p=new node;
        p->info=w;
        p->ll=NULL;
        p->rl=NULL;
    }
    else
        if(w<p->info)
            p->ll=tree(p->ll,w);
        else
            p->rl=tree(p->rl,w);
 
    return p;
}
 
void treeout( node *t, int level)
{
    int tab = 5;
    if (t == NULL)
        cout <<"Дерево пусто ! \n";
    else
    {
        if (t->rl != NULL) treeout(t->rl, level+1);
        cout<<setw(tab*level) <<t->info <<endl;
        if (t->ll != NULL) treeout(t->ll, level+1);        
    }
}
 
void min_mass (int *mass, int *a, int n)
{
    for (int i=0; i<n; i++)
    {
        if (a[0] > mass[i] && a[1] != mass[i] && a[2] != mass[i])
            a[0] = mass[i];
        else if (a[1] > mass[i] && a[0] != mass[i] && a[2] != mass[i])
            a[1] = mass[i];
        else if (a[2] > mass[i] && a[1] != mass[i] && a[0] != mass[i])
            a[2] = mass[i];
    }
}
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2013, 08:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти три минимальных элемента в дереве и массиве (Доработать код) (C++):

Найти в массиве три минимальных элемента - C++
Напишите программу, которая находит в массиве три минимальных элемента, то есть три первых элемента массива после сортировки по...

Найти в массиве целых три минимальных числа - C++
Найти в массиве целых три минимальных числа Учусь программировать помогите решить) заранее спасибо)

Найти три минимальных элемента в предпоследнем столбце матрицы - C++
1. Найти три минимальных элемента в предпоследнем столбце матрицы A #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; ...

Найти три наибольших элемента в массиве - C++
Здравствуйте! Помогите, пожалуйста, с задачей: необходимо найти три наибольших элемента в массиве. Как найти наибольший я понимаю, а вот...

Найти три максимальных и три минимальных значения 10 случайных чисел - C++
помогите написать программку.

Найти в массиве три последовательных элемента, сумма которых максимальна - C++
3) Найдите три последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Арчер
0 / 0 / 0
Регистрация: 15.01.2013
Сообщений: 6
16.01.2013, 08:58 #2
Я ащ запутался О.о

Добавлено через 48 секунд
Это ты дето учишься??
0
Stan1994
11 / 11 / 1
Регистрация: 11.12.2011
Сообщений: 122
16.01.2013, 16:49  [ТС] #3
Цитата Сообщение от Арчер Посмотреть сообщение
Я ащ запутался О.о

Добавлено через 48 секунд
Это ты дето учишься??
В инсте
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2013, 16:49
Привет! Вот еще темы с ответами:

Найти 2 минимальных элемента в строке - C++
Есть матрица, в каждой строке ищется минимальный элемент. Подскажите пожалуйста, как в каждой строке найти два минимальных элемента? ...

Найти два минимальных элемента одномерного массива - C++
Доброе время суток, подскажите, как найти 2 самых маленьких элемента! За ранее благодарен!!! Найти 2 самых маленьких элемента в...

Найти два минимальных элемента заданной последовательности - C++
Дана последовательность чисел, оканчивающаяся нулем. Найти два минимальных элемента заданной последовательности. Формат входных данных...

Есть ли в одномерном массиве три подряд одинаковых элемента? - C++
Если в одномерном массиве есть три подряд идут одинаковых элемента, то переменной r присвоить значение истина.


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru