Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2012, 09:35   #1
Anubys
Форумчанин
 
Регистрация: 08.05.2010
Сообщений: 177
По умолчанию Двоичное дерево поиска

Тупо не хочет сохранять адреса подскажите в чем проблема. Когда вывожу дерево на экран ничего не вижу, но как только передаю функции существующую структуру, а не пустой указатель все идет классно.
Код:
void add_book(Books* tree)
{
   Books new_book;
   new_book.is_root = false;
   cout << Convert("============================Розміщення книги============================") << endl;
   cout << Convert("Введіть Назва книги(без пробілів): ") << endl;
   cin >> new_book.title;
   cout << Convert("Введіть автора книги(без пробілів): ") << endl;
   cin >> new_book.author;
   cout << Convert("Введіть №УДК книги: ") << endl;
   cin >> new_book.udk;
   cout << Convert("Введіть рік видання книги: ") << endl;
   cin >> new_book.year;
   cout << Convert("Введіть загальне число примірників книги: ") << endl;
   cin >> new_book.total;
   insert_tree(tree, new_book);
}

void insert_tree(Books* root1, Books &add_books)
{
   add_books.left  = NULL;
   add_books.right = NULL;

   Books *new_book;
   new_book = new Books;
   new_book->udk = add_books.udk;
   new_book->author = add_books.author;
   new_book->title  = add_books.title;
   new_book->year   = add_books.year;
   new_book->total  = add_books.total;
   new_book->left = NULL;
   new_book->right = NULL;
   new_book->parent = NULL;

   if(root1 == NULL)
   {
       root1 = new_book;
       return;
   } else
   {
       if(root1->year >= add_books.year)
       {
           if(root1->right == NULL)
           {
               new->parent = root1;
               root1->right = new_book;
           } else
           {
               insert_tree(root1->right, add_books);
           }
       } else
       {
           if(root1->left == NULL)
           {
               new->parent = root1;
               root1->left = new_book;
           } else
           {
               insert_tree(root1->left, add_books);
           }
       }
   }
}

int main(int argc, char* argv[])
{
   //print_menu();
   Books *root = NULL;
   add_book(root);
   show_tree(root)
   getch();
   return 0;
}

Последний раз редактировалось Anubys; 03.10.2012 в 09:43.
Anubys вне форума Ответить с цитированием
Старый 03.10.2012, 21:19   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

root - это переменная типа указатель. Вам нужно внутри функции изменить ее значение (присвоив ей результат работы new). Для этого необходимо передавать ее либо по указателю, либо по ссылке - получится либо указатель на указатель, либо ссылка на указатель.
Иначе вы можете только получить доступ к тому, на что указывает этот указатель, но не изменить его собственное значение.
Оба следующих примера равно неверны (мы пытаемся передать переменную по значению и изменить ее внутри функции, и не важно, относится она к типу указателя или целого):
Код:
void foo(Node* n)
{
n = new Node;
}
void bar(int a)
{
a = 10;
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двоичное дерево поиска SkyArcher C# (си шарп) 0 21.05.2011 20:05
Двоичное дерево поиска в С++ Madara88 C++ Builder 0 14.04.2011 09:33
Двоичное дерево поиска Madara88 Помощь студентам 0 14.04.2011 09:29
Двоичное дерево поиска, количество элементов на каждом уровне Kayot027 Помощь студентам 2 22.01.2011 13:49
Двоичное дерево поиска структур lioshenka Общие вопросы C/C++ 3 15.08.2009 12:18