0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 10
1

Найти ошибку в коде

04.06.2015, 11:59. Показов 434. Ответов 4
Метки нет (Все метки)

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
#include <iostream>                 //Подключаем библиотеки
#include <iomanip>
#include <windows.h>
#include <fstream>
# include <conio.h>
using namespace std;
struct node                         //Описание узла
{
    int info;
    node *l, *r;
};
node *tree=NULL;
void push(int N, node **t)
{
    if((*t)==NULL)
    {
        (*t)=new node;
        (*t)->info=N;
        (*t)->l=(*t)->r=NULL;
        return;
    }
         if (N%2==1) 
             {
                 push(N/2,&(*t)->l);
                 push(N-(N/2),&(*t)->r);
              } 
         else push(N,&(*t)->r);
}
void print (node *t,int u) 
{
    if (t==NULL) return; //Если дерево пустое, то отображать нечего, выходим
    else //Иначе
    {
    print(t->l,++u);//С помощью рекурсивного посещаем левое поддерево
    for (int i=0;i<u;++i) cout<<" ";
    cout<<t->info<<endl; //И показываем элемент
    u--;
    }
    print(t->r,++u); //С помощью рекурсии посещаем правое поддерево
}
void main ()
{   SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N; //Корень Дерева 
    int K; //Число, передаваемое в дерево
    int S=1;  //Количество элементов
    cout<<"введите число N и К "<<endl;
    cin>>N>>K;
    push(N,&tree);
    while (K>1)
        {
            push(K,&tree);
            K=K/2;
        }
    cout<<"ваше дерево\n";
    print(tree,0);
    getch();       
}
Не могу понять где ошибка, выводит не то дерево которое нужно
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 11:59
Ответы с готовыми решениями:

Найти сумму целых отрицательных чисел удовлетворяющих условию (найти и исправить ошибку в коде)
#include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; int main() { int y = 0; ...

Найти ошибку в коде
надо ввести равные стороны 3-ка #include &lt;iostream&gt; using namespace std; int main() { ...

Найти ошибку в коде
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() { int m, n, **a,...

Найти ошибку в коде
Код крашится, кто знает в чем дело? Может протестировать чем - то?

4
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
04.06.2015, 12:17 2
Все из-за плохо написсаного кода!
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 10
04.06.2015, 17:10  [ТС] 3
А что именно не так в коде?
0
14 / 14 / 13
Регистрация: 04.06.2015
Сообщений: 85
04.06.2015, 17:57 4
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
#include <iostream>                 //Подключаем библиотеки
#include <iomanip>
#include <windows.h>
#include <fstream>
#include <conio.h>
 
using namespace std;
 
struct node                         //Описание узла
{
    int info;
    node *l, *r;
};
node *tree = NULL;
void push(int N, node *&t)
{
    if (NULL == t) //если ничего нет
    {
        t = new node; 
        t->info = N;
        t->l = t->r = NULL;
    }
    if (N < t->info)
    {
        if (t->l != NULL)push(N, t->l);
        else
        {
            t->l = new node;
            t->l->l = t->l->r = NULL;
            t->l->info = N;
        }
    }
 
    if (N > t->info)
    {
        if (t->r != NULL)push(N, t->r);
        else
        {
            t->r = new node;
            t->r->l = t->r->r = NULL;
            t->r->info = N;
        }
    }
}
void print(node *t, int u)
{
    if (t == NULL) return; //Если дерево пустое, то отображать нечего, выходим
    else //Иначе
    {
        print(t->l, ++u);//С помощью рекурсивного посещаем левое поддерево
        for (int i = 0; i<u; ++i) cout << " ";
        cout << t->info << endl; //И показываем элемент
        u--;
    }
    print(t->r, ++u); //С помощью рекурсии посещаем правое поддерево
}
void main()
{
    //SetConsoleCP(1251);
    //SetConsoleOutputCP(1251);
    int N = 0; //Корень Дерева 
    int K = 0; //Число, передаваемое в дерево
    //int S = 1;  //Количество элементов
    setlocale(LC_ALL, "Russian");
    cout << "введите число N и К " << endl;
    cin >> N >> K;
    push(N, *&tree);
    while (K>1)
    {
        push(K, *&tree);
        K = K / 2;
    }
    cout << "ваше дерево\n";
    print(tree, 0);
    _getch();
}
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 10
04.06.2015, 22:06  [ТС] 5
Условия задачи не много не такие.
Там дерево по условиям нужно построить.
Дано положительное число N. Создать дерево, корень которого имеет
значение N, а вершины обладают следующими свойствами: вершина с четным значением
K имеет левую дочернюю вершину со значением K/2 и не имеет правой дочерней
вершины; вершина со значением 1 является листом; вершина с любым другим нечетным
значением K имеет две дочерние вершины: левую со значением K/2 и правую со
значением K − K/2 (символ «/» обозначает операцию деления нацело). Распечатать
построенное дерево.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2015, 22:06
Помогаю со студенческими работами здесь

Найти ошибку в коде
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void printarray(int **a, const int n, const int m);...

Найти ошибку в коде
int i = 0, counter; float sum = 0, grade, quality; cout &lt;&lt; &quot;Inter a number of pupils:...

Найти ошибку в коде
Доброго времени суток, программисты. У меня возникла проблема, в которой я не могу разобраться, а...

Найти ошибку в коде
Только начал изучать чудесное ООП и преподаватель задал ДЗ, в котором нужно реализовать добавление...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru