С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 10

Обход упорядоченного дерева. Не могу понять на что ругается прогорамма... Ошибок вроде как нет...

14.07.2011, 22:25. Показов 1577. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
151
152
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector> 
#include <ctime>
 
using namespace std;
 
struct node
{
    int Key;
    int Cout;
    node *Left;
    node *Right;
};
 
class TREE
{
    private:
    node *Tree; // Указатель на корень дерева
    void Search (int, node**);
    public:
    TREE() {Tree=NULL;}
    node** GetTree (){return & Tree;} // Получение узла дерева.
    void BuildTree ();
    void CleanTree (node**);
    void ObhodEnd (node** );
    void ObhodLeft (node** );
    void Obhodback (node** );
    void Vyvod (node**,int);
};
 
void main ()
{
    setlocale(LC_ALL,"Russian");
    TREE A;
    A.BuildTree();
    cout<< endl <<"Вывод дерева:"<<endl;
    A.Vyvod (A.GetTree(),0);
    cout<<"Прямой обход дерева:";
    A.ObhodLeft (A.GetTree());
    cout<< endl<< "Обратный обход дерева:";
    A.ObhodEnd (A.GetTree());
    cout<< endl<< "Симметричный обход дерева:";
    A.Obhodback (A.GetTree());
    A.CleanTree (A.GetTree());
}
 
void TREE::BuildTree()
//Построение бинарного дерева (рекурсивный алгоритм).
//Tree-указатель на корень дерева.
{
    int el;
    cout<<"Введите ключи вершин дерева. Затем введите 0." <<endl;
    cin>> el;
    while(el!=0)
    {
        Search (el,&Tree);
        cin>>el;
    }
 
}
 
void TREE::Search(int x, node**p)
// Поиск вершины с ключом x в дереве со вставкой
//(рекурсивный алгоритм).
//*p- указатель на корень дерева.
{
    if(*p=NULL)
    {
    // Вершины в дереве нет; включить её.
        *p=new(node);
        (**p).Key =x;
        (**p).Cout =1;
        (**p).Left =NULL;
        (**p).Right =NULL;
    }
    else
    if(x<(**p).Key)
    Search(x,&(**p).Left);
    else
    if(x>(**p).Key)
    Search (x,&(**p).Right);
    else
    (**p).Cout=(**p).Cout +1;
}
 
void TREE::ObhodLeft(node**w)
//Прямой обход дерева.
//*w- указатель на корень дерева.
{
    if(*w!=NULL)
    {
        cout<<(**w).Key<<"";
        ObhodLeft(&((**w).Left));
        ObhodLeft(&((**w).Right));
    }
}
 
void TREE::ObhodEnd(node**w)
//Обратный обход дерева.
//*w- указатель на корень дерева.
{
    if(*w!=NULL)
    {
        ObhodEnd(&((**w).Left));
        ObhodEnd(&((**w).Right));
        cout<<(**w).Key<<" ";
    }
}
 
void TREE::Obhodback(node **w)
//Симметричный обход дерева.
//*w- указатель на корень дерева.
{
    if(*w!=NULL)
    {
        Obhodback(&((**w).Left));
        cout<<(**w).Key<<" ";
        Obhodback(&((**w).Right));
    }
}
 
void TREE::CleanTree(node **w)
//Очистка дерева.
//*w- указатель на корень дерева.
{
    if(*w!=NULL)
    {
        CleanTree(&((**w).Left));
        CleanTree(&((**w).Right));
        delete *w;
    }
}
 
void TREE::Vyvod(node**w,int l)
//Изображение дерева *w на экране
//(рекурсивный алгоримт).
//*w- указатель на корень дерева.
{
    int i;
    if(*w!=NULL)
    {
        Vyvod(&((**w).Right),l+1);
        for(i=1;i<=l;i++)
        cout<<" ";
        cout<<(**w).Key<<endl;
        Vyvod(&((**w).Left),l+1);
    }
}
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.07.2011, 22:25
Ответы с готовыми решениями:

Флаги для прогораммы C++
Приветствую. В Java все делается легко, если нужно задать флаги для возвращаемых значений и тому...

Вроде переполнение, а вроде бы и нет
День добрый! Интересует, почему си не дает мне сделать следующую штуку. int a = 4999998848;...

Разница между понятиями "Обход в прямом направлении" и "Итерационный прямой обход"
Ребятаа, обьясните чем различается: Обход в прямом направлении и Итерационный прямой обход ...

10
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
14.07.2011, 23:12
для начала:
C++
1
if(*p==NULL)
Добавлено через 34 секунды
И форматни код, имей совесть.
1
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 10
15.07.2011, 00:01  [ТС]
Я не умею))) Я нуб))))))
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
15.07.2011, 00:15
Тут есть где-то тема, как пользоваться редактором сообщений, смотри её.
0
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 10
15.07.2011, 00:34  [ТС]
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
151
152
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector> 
#include <ctime>
 
using namespace std;
 
struct node
{
    int Key;
    int Cout;
    node *Left;
    node *Right;
};
 
class TREE
{
    private:
    node *Tree; // Указатель на корень дерева
    void Search (int, node**);
    public:
    TREE() {Tree=NULL;}
    node** GetTree (){return & Tree;} // Получение узла дерева.
    void BuildTree ();
    void CleanTree (node**);
    void ObhodEnd (node** );
    void ObhodLeft (node** );
    void Obhodback (node** );
    void Vyvod (node**,int);
};
 
void main ()
{
    setlocale(LC_ALL,"Russian");
    TREE A;
    A.BuildTree();
    cout<< endl <<"Вывод дерева:"<<endl;
    A.Vyvod (A.GetTree(),0);
    cout<<"Прямой обход дерева:";
    A.ObhodLeft (A.GetTree());
    cout<< endl<< "Обратный обход дерева:";
    A.ObhodEnd (A.GetTree());
    cout<< endl<< "Симметричный обход дерева:";
    A.Obhodback (A.GetTree());
    A.CleanTree (A.GetTree());
}
 
void TREE::BuildTree()
//Построение бинарного дерева (рекурсивный алгоритм).
//Tree-указатель на корень дерева.
{
    int el;
    cout<<"Введите ключи вершин дерева. Затем введите 0." <<endl;
    cin>> el;
    while(el!=0)
    {
        Search (el,&Tree);
        cin>>el;
    }
 
}
 
void TREE::Search(int x, node**p)
// Поиск вершины с ключом x в дереве со вставкой
//(рекурсивный алгоритм).
//*p- указатель на корень дерева.
{
    if(*p=NULL)
    {
    // Вершины в дереве нет; включить её.
        *p=new(node);
        (**p).Key =x;
        (**p).Cout =1;
        (**p).Left =NULL;
        (**p).Right =NULL;
    }
    else
    if(x<(**p).Key)
    Search(x,&(**p).Left);
    else
    if(x>(**p).Key)
    Search (x,&(**p).Right);
    else
    (**p).Cout=(**p).Cout +1;
}
 
void TREE::ObhodLeft(node**w)
//Прямой обход дерева.
//*w- указатель на корень дерева.
{
    if(*w!=NULL)
    {
        cout<<(**w).Key<<"";
        ObhodLeft(&((**w).Left));
        ObhodLeft(&((**w).Right));
    }
}
 
void TREE::ObhodEnd(node**w)
//Обратный обход дерева.
//*w- указатель на корень дерева.
{
    if(*w!=NULL)
    {
        ObhodEnd(&((**w).Left));
        ObhodEnd(&((**w).Right));
        cout<<(**w).Key<<" ";
    }
}
 
void TREE::Obhodback(node **w)
//Симметричный обход дерева.
//*w- указатель на корень дерева.
{
    if(*w!=NULL)
    {
        Obhodback(&((**w).Left));
        cout<<(**w).Key<<" ";
        Obhodback(&((**w).Right));
    }
}
 
void TREE::CleanTree(node **w)
//Очистка дерева.
//*w- указатель на корень дерева.
{
    if(*w!=NULL)
    {
        CleanTree(&((**w).Left));
        CleanTree(&((**w).Right));
        delete *w;
    }
}
 
void TREE::Vyvod(node**w,int l)
//Изображение дерева *w на экране
//(рекурсивный алгоримт).
//*w- указатель на корень дерева.
{
    int i;
    if(*w!=NULL)
    {
        Vyvod(&((**w).Right),l+1);
        for(i=1;i<=l;i++)
        cout<<" ";
        cout<<(**w).Key<<endl;
        Vyvod(&((**w).Left),l+1);
    }
}
Добавлено через 7 минут
if(*p==NULL) - Да... она на неё ругается... я это понял! Но почему?

Добавлено через 2 минуты
И спасибо что про тему сказал)) ... Я пока не так хорошо разбираюсь в структурах что бы понять, что он от меня требует...
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
15.07.2011, 01:02
Цитата Сообщение от Ne_Mega_Ne_Keek Посмотреть сообщение
if(*p==NULL) - Да... она на неё ругается... я это понял! Но почему?
"Она" ругается не на "неё". То есть на эту строку, но не в таком виде.
C
1
if (*p = NULL)
Здесь происходит присваивание. В переменную *p (в ячейку памяти, на которую указывает p) записывается NULL (будем считать, что это 0). В результате проверяемое условие всегда ложно (так как выражение равно нулю). Если сам указатель p равен нулю, то при попытке выполнить это действие программа упадёт.
C
1
if (*p == NULL)
Здесь значение по указателю p сравнивается с нулём (с нулевым указателем, если точнее). Но если сам p равен нулю, то программа в этом месте всё-равно упадёт. Но будем считать, что за этим должна следить вызывающая программа и сам указатель p имеет корректное значение. Тогда такой вариант работает правильно: указатель (*p) можно разыменовывать только если он не нулевой, иначе нужно задать для него корректное значение. Ну, в общем, там в программе так и делается. Ошибка только в использовании = вместо ==
1
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 10
15.07.2011, 01:25  [ТС]
Спасибо)))) Блин! Как всегда ошибка в какой-то мелочи которую без должной снаровки не разглядеть...) Фух... Теперь остаётся всё это отчитать)) Спасибо ещё раз)

Добавлено через 1 минуту
Вот я невнимательный капец(
1
 Аватар для Robotun
1 / 1 / 0
Регистрация: 15.07.2011
Сообщений: 11
15.07.2011, 02:13
Подскажи код ошибки...
0
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 10
15.07.2011, 02:14  [ТС]
Robotun Подскажи код ошибки...

Какой?
1
 Аватар для Robotun
1 / 1 / 0
Регистрация: 15.07.2011
Сообщений: 11
15.07.2011, 02:22
Давай в аське или в другом месте...
0
4 / 4 / 0
Регистрация: 10.07.2011
Сообщений: 10
15.07.2011, 16:40  [ТС]
Ну кинь что-нибудь сюда... Эмэйл... айди в вк... или скайп)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2011, 16:40
Помогаю со студенческими работами здесь

Синтаксических и арифметических ошибок в цикле вроде как нет, но он не работает
Вот условие задачи: Дафна инвестировала $100 под простые 10%. Другими словами, ежегодно ...

Qt Creator ругается на оператор new, тогда как ошибок нет
вообщем ошибку показывает только сама IDE суть в том что пишу я для платформы с архитектурой...

Не могу понять на что ругается компилятор
Задание такое: Нужно написать программу для обработки информации о предлагаемых к продаже...

жалуется на стоку int adventurers. killed. survivors; не могу понять почему, вроде всё правильно написано
// Утраченный клад // Персонализированная приключенческая игра #include &lt;iostream&gt; #include...

Выдает много ошибок, код програми скинул, вроде всё написал правильно но не работает
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double fY(double x) { const...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru