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

Работа с деревом. При добавлении вершины сообщается об ее существовании - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ База будет хранить примерно около 5 таблиц по 1000 элементов. Что выбрать? http://www.cyberforum.ru/cpp-beginners/thread1130856.html
Доброго времени суток! Разрабатываю проект в Visual Studio 2013 с помощью Win32 Api. Запланированный функционал ниже: 1. Масштабируемые таблицы - создание таблиц нужных размеров - добавление\удаление столбцов - записи в ячейках могут редактироваться - размер отображения данных таблицы может изменяться (функция "Масштаб" из MS Office)
C++ Распечатать квадрат той из матриц, в которой сумма элементов в двух главных диагоналях меньше Написать программу. Даны две квадратные действительны матрицы размерностью n * n. Распечатать квадрат той из них, в которой сумма элементов в двух главных диагоналях меньше. Если такая сумма одинакова для двух матриц, то вывести на экран матрицу в соответствии с желанием пользователя http://www.cyberforum.ru/cpp-beginners/thread1130855.html
Поменять местами столбцы двухмерного массива, заданных с клавиатуры C++
Задание таково: есть двухмерный массив (матрица) 15х15, заполнена целыми случайными числами. Нужно поменять местами два столбца, номера которых задаются с клавиатуры. Помогите именно с самим процессом перестановки столбцов) У меня вообще никаких идей( #include "stdafx.h" #include <iostream> #include <time.h> #include <ctime> using namespace std; int main() {
C++ Отображение ASCII символов в двоичном коде
Добрый день. Есть программа, которая отображает двоичный код ASCII символа. #include <iostream> using namespace std; struct byte { unsigned a : 1; unsigned b : 1;
C++ В каких случаях вызывается конструктор копирования, и стоит ли вообще об этом думать? http://www.cyberforum.ru/cpp-beginners/thread1130820.html
В книге Г. Шилдта написано, что конструктор копирования может неявно вызываться, при инициализации объекта значением, которое возращает ф-я. Вот пример кода из книги. Вызов всех конструкторов/Деструкторов маркируется соотвествующими сообщениями. В книге результат(ниже приведенного кода) приводиться такой - 2 обычных конструктора + 1 конструктор копирования. У меня же резальтут такой(скрин ниже)...
C++ Алгоритм быстрой сортировки - посчитать количество перестановок и сравнений элементов массивов Помогите пожалуйста в алгоритме быстрой сортировки посчитать количество перестановок и сравнений элементов массивов. Не могу понять куда нужно счетчики встроить. void quick(int *a , int l, int r) { int x = a; int i = l; int j = r; while(i <= j) { //SravQuick++; подробнее

Показать сообщение отдельно
baduk
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 6

Работа с деревом. При добавлении вершины сообщается об ее существовании - C++

26.03.2014, 23:38. Просмотров 149. Ответов 0
Метки (Все метки)

программа создает бинарное дерево, но после того как я добавляю вторую вершину, выдает что такая вершина уже существует, подскажите пожалуйсто что исправить
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <stdio.h>
#include <stdlib.h>
 
typedef struct stree tree;
struct stree {
    tree * left;  // указатель на левую вершину
    tree * right; //указатель на правую вершину
    int value; //указатель на значение в узле
    };
 
int x;
int *mas;
 
void insert(tree **n, int value) //Добовление узла
{
    if(*n == NULL) {
        *n =(tree*) malloc(sizeof(tree));
        (*n)-> value = x;
        (*n)->left = NULL;
        (*n)->right = NULL;
    }
    else if(x < (*n)->value) {
        insert(&((*n)->left),x);
    }
    else if (x >= (*n)->value) {
        insert(&((*n)->right),x);
    }
}
 
void delete(tree ** n) {  //удаление узла
    if ((*n)->left == NULL) {
        tree * to_free = *n;
        *n = (*n)->right;
        free(to_free);
    } else if ((*n)->right == NULL) {
        tree * to_free = *n;
        *n = (*n)->left;
        free(to_free);
    } else {
        tree ** child = &((*n)->right);
        while ((*child)->left != NULL) {
            child = &((*child)->left);
        }
       int value = (*child)->value;
        delete(child);
        (*n)->value = value;
    }
}
void print(tree * n, int level) { //печать дерва
    int i;
    if (n == NULL)
        return;
    print(n->left, level+1);
    for (i = 0; i < level; i++) {
        printf("--");
    }
    printf("%c\n", n->value);
    print(n->right, level+1);
}
 
void remove_node (tree ** n) { //удаление дерева
    
    while (*n != NULL) {
        delete(n);
    }
}
 
 
tree ** search(tree ** n, int value) {
    if (*n == NULL)
        return NULL;
    else if (x < (*n)->value)
        return search(&((*n)->left), x);
    else if (x > (*n)->value)
        return search(&((*n)->right), x);
    else return n;
    
}
 
int sTree_deep(tree * n)
{
    if (n)
    {
        int res1, res2;
        res1 = sTree_deep(n->left);
        res2 = sTree_deep(n->right);
        
        if (res1 < res2)
            res1 = res2;
        return res1 + 1;
    }
    else
    {
        return 0;
    }
}
 
void beep_deep(tree * n, int * mas, int deep)
{
    if (n)
    {
        mas[deep]++;
        beep_deep(n->left,  mas, deep + 1);
        beep_deep(n->right, mas, deep + 1);
    }
}
 
int level_num ( tree * n)
{
    int i, d, res;
    res = 0;
    d = sTree_deep(n) + 1;
    int * mas=(int*) malloc(sizeof(int) * d);
    for (i = 0; i <= d; i++)
    {
        mas[i] = 0;
    }
    
    beep_deep(n, mas, 0);
    
    for (i = 0; i <= d; i++)
    {
        if (mas[i] > mas[res])
            res = i;
    }
    
    return res;
}
 
 
int main() {
    
    tree * t = NULL;
    
    char d,x;
    char* str = (char*)malloc(sizeof(char)*80);
    printf("p          печать дерева\n+chislo    добовление узла\n-chislo    удаление узла\nr          удалить дерево\nd          уровень с максимальным числом вершин\nq          exit\n");
    
    while (scanf("%c", &d) !=0 ) {
        
        if (d == '+') {
            scanf("%c", &x);
            if (search(&t, x-'A'+1))
                printf("узел уже есть\n");
            else insert(&t, x-'A'+1);
        }
        if (d == 'p'){
            print (t, 0);
        }
        if (d == '-') {
            scanf("%c", &x);
            if (search(&t, x-'A'+1) == NULL)
                printf("Такого узла нет\n");
            else
                delete(search(&t, x-'A'+1));
        }        if (d == 'd')
        {
            printf("%d", level_num(t));
        }
        if (d == 'r')
            remove_node(&t);
        if (d == 'q') {
            remove_node(&t);
            break;
        }
       
        
        
    }
    
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru