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

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

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

Показать сообщение отдельно
Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30

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

10.03.2014, 15:54. Просмотров 294. Ответов 7
Метки (Все метки)

Задание:
-Визначити кількість вузлів дерева, в яких є два нащадки.
-функция добавления елемента
-функцию удаления елемента
-функцію друку всіх елементів контейнера на екран
-функцію видалення контейнера.
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 должен удалить узел дерева.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru