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

Не могу понять в чем ошибка?! - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Поиск по структуре "Сотрудник" http://www.cyberforum.ru/cpp-beginners/thread1115449.html
Добрый день! Спасибо, что зашли! Появились вопросы по структурам. Задание: Струкутура: Структура "Сотрудник": - фамилия, имя, отчество; - должность - год рождения;
C++ строки и динамическая память определить количество слов в строке, начинающихся с заданной пары символов. Строка размещается в динамической памяти http://www.cyberforum.ru/cpp-beginners/thread1115444.html
Проверка на число которое находится в определленом адресе C++
Привет всем, не буду много писать, сразу перейду к сути дела: Мне надо сделать так, чтобы программа проверяла число по определенному адресу ( там числа формата float ). Допустим в адресе число 56.01, мне надо чтобы была проверка допустим 56.0 >= 1000.0 . Проблема в том, что я не понимаю как сравнивать 1000.0 с адресом ( точнее число которое находится в этом адресе ). Надеюсь я нормально...
C++ Создать функцию, подсчитывающую по заданным сторонам треугольника величины его углов
Привет, помогите составить программу. Создать функцию, подсчитывающую по заданным сторонам треугольника величины его углов. Выведите значения полученных углов из главной функции.
C++ Класс "Прямоугольник" с данными верхняя левая и правая нижняя точки http://www.cyberforum.ru/cpp-beginners/thread1115419.html
Помогите, пожалуйста решить задачу в С++ Задание. 1. Для задачи предыдущей лабораторной создать класс-потомок согласно заданию. В классе-потомке определить дополнительные свойства (согласно заданию) и методы (возможно переопределение методов класса-родителя) 2. Проверить работу всех функций в новом классе (как унаследованных, так и собственных). Задача. Класс "Прямоугольник" с...
C++ Присваивание Помогите с оператором присваивания ) class Stack { private: myString *st; .... void operator=(myString); class myString подробнее

Показать сообщение отдельно
Аммурка
 Аватар для Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
10.03.2014, 15:54     Не могу понять в чем ошибка?!
Задание:
-Визначити кількість вузлів дерева, в яких є два нащадки.
-функция добавления елемента
-функцию удаления елемента
-функцію друку всіх елементів контейнера на екран
-функцію видалення контейнера.
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
#include <iostream>
using namespace std;
struct node
{
    int key, value;
};
//------------------------------------------------------
struct tree
{
    node data;
    tree *left, *right;
} *root;
//------------------------------------------------------
tree* Insrec(tree *root, node data)
{
    if (!root)
    {
        root = new tree;
        root->data = data;
        root->left = 0;
        root->right = 0;
    }
    else
    if (data.value < root->data.value)
        root->left = Insrec(root->left, data);
    else
        root->right = Insrec(root->right, data);
    return root;
}
//------------------------------------------------------
void func(tree *root)
{
    if ((root->left) && (root->right))
        cout << "Element with key " << root->data.key << " has two childs" << endl;
    if (root->left != NULL)
        func(root->left);
    if (root->right != NULL)
        func(root->right);
}
//------------------------------------------------------
void print(tree *root, int level)
{
    cout << "Key: " << root->data.key << ", value: " << root->data.value << " Level: " << level << endl;
    if (root->left != NULL)
        print(root->left, level + 1);
    if (root->right != NULL)
        print(root->right, level + 1);
}
//------------------------------------------------------
void del(tree *root)
{
    if (root->left != NULL)
        del(root->left);
    if (root->right != NULL)
        del(root->right);
    delete root;
}
//------------------------------------------------------
tree *search(tree *root)
{
    if (root->left)
        search(root->left);
    return root;
}
//------------------------------------------------------
tree *kick(tree *root, int data, tree *before)
{
    if (data > root->data.value) {
        before = root;
        kick(root->right, data, before);
    }
    else if (data < root->data.value) {
        before = root;
        kick(root->left, data, before);
    }
    else if (data == root->data.value) {
        if ((before->left) && (before->left->data.value == root->data.value)) {
            before->left = root->right;
            search(root)->left = root->left;
        }
        else {
            before->right = root->right;
            search(root)->left = root->left;
        }
        delete root;
    }
    return root;
}
//------------------------------------------------------
int main()
{
    int n;
    cout << "Put n: ";
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        node *data = new node;
        cout << "Put data " << i + 1 << ": ";
        cin >> data->value;
        data->key = i;
        root = Insrec(root, *data);
    }
    func(root);
    print(root, 0);
    system("pause");
    //------------------------------------------------------
        for (int i = 0; i<n; i++)  {
        int key;
        int Zn;
        cout << "Delete element? (1 - Yes , 0 - No): ";
        cin >> Zn;
        if (Zn)  {
            cout << "Element number: ";
            cin >> key;
            kick(root, key, NULL);
            --n;
        }
        else break;
    }
    print(root, 0);
    system("pause");
    //------------------------------------------------------
    del(root);
    return 0;
}
Ошибку выбивает где-то вот здесь(строки 77-80):
C++
1
2
3
4
if ((before->left) && (before->left->data.value == root->data.value)) {
            before->left = root->right;
            search(root)->left = root->left;
        }
Как исправить? kick должен удалить узел дерева.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru