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

Вставка элемента в дерево - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка в правильности команды... http://www.cyberforum.ru/cpp-beginners/thread203600.html
В понедельник нужно будет показать правильность работы проги... Ошибку пишет тут (декларатион синтаксис еррор ) " bool smezh(edge q1,edge q2){ // 1 - если q1 и q2 смежны, иначе -0 " #include <iostream.h> #include <stdio.h> #include <conio.h> FILE* fi = fopen("m_graph.txt","r");
C++ Как сделать, чтобы не зацикливалось? Добрый вечер. Даны две функции у1 и у2. распечатывать значения функции, пока не будет достигнуто пересечение графиков #include <iostream> #include <cmath> using namespace std; int main(){ double const h=0.01; double x,y1,y2; x=2.0; http://www.cyberforum.ru/cpp-beginners/thread203598.html
Почему зацикливается??? C++
Доброе время суток. Прошу объяснить или дать ссылку где такое описывается. #include <iostream> using namespace std; int main(){ double const h=0.01; double x; x=2.0; do{ cout<<x<<"\n";
C++ Подсчитать сумму кодов символов каждого слова
Срочно нужно решить задачу! Пожалуйста, помогите, кто как может! Задачу нужно писать на C и, желательно, как можно проще для понимания). Ввести матрицу. Элементы матрицы - строки. Подсчитать сумму кодов символов каждого слова и, если сумма оказалась чётной, развернуть зеркально это слово в строке. Полученные матрицы вывести на экран. Стандартных функций при работе со строками не использовать.
C++ библиографический поиск http://www.cyberforum.ru/cpp-beginners/thread203581.html
есть файл со списком назвваний книг и статей. прогамма должна читать ключевые слова и определят, находятся ли соответствующие им названия книг и статей в списке. названия, содержащие ключевые слова, печатаются.
C++ вставка элемента необходимо вставить после элементов массива являющихся полными квадратами их корни. У меня если элемент массива равен 1, его не определяет как полный квадрат. #define N 100 using namespace std; int koren(int a,int i) {int j=0,flag=0,b=0,k=0; for(j=1;j<a;j++) {if(j*j==a) {k=j; flag=1; подробнее

Показать сообщение отдельно
MECTb
0 / 0 / 0
Регистрация: 05.12.2010
Сообщений: 13
06.12.2010, 00:52  [ТС]     Вставка элемента в дерево
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
#include <iostream>
#include <string>
#include <list>
 
struct node {
    std::string str;
    std::list<node*> children;
    node(const std::string& s):str(s),children() {}
};
// добавление в дерево элемента по ключу
// возвращает true если узел был успешно вставлен в под дерево
// и false в другом случае (не нашлось указанного предка)
// key - ключ по которому ищем предка,
// newvalue - данные для нового узла.
bool push(node *&t, const std::string& key, const std::string& newvalue)
{
    // сначала надо проверить - если указатель нулевой к нему нельзя обращаться.
    if (t!=NULL) {
        if (key == t->str) {  // если этот узел тот кому у список детей надо вставить новый узел то...
            t->children.push_back(new node(newvalue)); // ... собственно вставляем новый узел.
            return true; // вставка успешная значит вернем true.
        } else {  // key != t->str, это не тот узел который должен стать родительским для нового узла...
            // ... значит надо попробовать поискать среди его детей,
            if (&& t->children.empty()) { // если дети есть,
                 for (std::list<node*>::iterator i=t->children.begin(); i != t->children.end(); ++i) {
                      // проходим по списку детей и пытаемся впарить новый узел каждому из них
                      // и если получается (см. ниже) то прерываем попытки впарить ивернем true.
                      if (push(*i, key, newvalue)) break;
                 }
                 return true;
            } else {  // t->children.empty() == true - если нет детей
                 // ключ не совпадает, детей нет, искать негде - в это поддерево вставить
                 // новый узел не удалось, вернем false
                 return false;
            }
        }
    } else { // t == NULL - узла нет, такое может быть только если толкаем в корень,
         // нету узла - сделаем. И вернем true т.к. получилось добавить новый узел.
         t = new node(newvalue);
         return true;
    }
}
// вывод дерева на экран
// эту мне лень коментировать, просто логика в следующем:
// выводим текущий узел и всех его детей в списке под ним с отступом,
// чтобы была видна иерархия.
void print(node *t, int n)
{
     if (t!=NULL) {
          std::cout << t->str;
          if (&& t->children.empty()) {
                std::cout << ":\n";
                for (std::list<node*>::iterator i=t->children.begin(); i != t->children.end(); ++i) {
                      for (int k=0; k!=n;++k) std::cout << "  ";
                      print(*i, n + 1);
                }
          } else {
                std::cout << ".\n";
          }
     }
}
// корректное освобождение памяти, выделенной под дерево.
// проходим по дереву и удаляем все узлы и освобождаем списки.
void del(node *&t)
{
    if (t != NULL) {
        if (&& t->children.empty()) {
            for (std::list<node*>::iterator i=t->children.begin(); i != t->children.end(); ++i) {
                del(*i);
            }
            t->children.clear();
        }
        delete t;
    }
}
int main() {
   node *tree = NULL; // корень дерева
   // далее заталкиваем в дерево элементы
   push(tree,"","first");
   push(tree,"first","second");
   push(tree,"first","third");
   push(tree,"first","forth");
   push(tree,"third","fifth");
   push(tree,"second","sixth");
   push(tree,"second","seventh");
   // выводим на экран ...
   print(tree, 1);
   // ... и удаляем
   del(tree);
   return 0;
}
Я полностью скопировал написанный тобой код и вставил в билдер,чтобы посмотреть правильность вывода и работоспособность,в итоге он выдал то что написанно выше..

&& - Это логическое AND если я не ошибаюсь,а там должно быть логическое отрицание?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru