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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
#1

Проблемы с выводом бинарного дерева - C++

03.10.2010, 01:56. Просмотров 916. Ответов 18
Метки нет (Все метки)

Вот, пытался сделать лабу. Проблема с выводом. Извините за код, знаю что он кривой, сделайте замечания!!!

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
/*
Два бинарных дерева зеркально подобны, если либо оба они пусты, 
либо оба непустые, и при этом левое поддерево одного из них подобно 
правом поддерево другого и наоборот. Определить, два дерева зеркально подобными
*/
#include <iostream>
#include <ctime>
 
using std::cout;
using std::cin;
using std::endl;
 
struct Node
 {
   int key;
   Node *left;
   Node *right;
 };
typedef Node* trees;
trees AddNode(trees& t, int n)
{
   if (t == NULL)  
   { 
       t = new Node; 
       t->left = NULL; 
       t->right = NULL; 
       t->key = n; 
  }
   else             
   { if (n >=t->key) 
         AddNode(t->right, n);  
     if (n <  t->key) 
         AddNode(t->left, n);   
    }
   return t;
}
 
int main()
{ int i=1;
  srand(time(NULL)); 
  setlocale( LC_ALL,"Russian" );
  trees tree_1=NULL, tree_2=NULL;
  for(;i<=3;i++)
  {
      AddNode(tree_1,rand()%-4+4);
      AddNode(tree_2,rand()%-4+4);
  }
   if ((tree_1==NULL&&tree_2==NULL)||(tree_1!=NULL&&tree_2!=NULL))
   {
       if ((tree_1->left==tree_2->right)||(tree_1->right==tree_2->left))
          {
              cout<<"Дерева дзеркально подiбнi!!!"<<endl;
              cout<<"tree_1 -> "<<tree_1->key<<"  "<<tree_1->left->key<<"  "<<tree_1->right->key<<endl;
              cout<<"tree_2 -> "<<tree_2->key<<"  "<<tree_2->left->key<<"  "<<tree_2->right->key;
         }
       else 
              cout<<"Дерева не дзеркально подiбнi!!!"<<endl;
              cout<<"tree_1 -> "<<tree_1->key<<"  "<<tree_1->left->key<<"  "<<tree_1->right->key<<endl;
              cout<<"tree_2 -> "<<tree_2->key<<"  "<<tree_2->left->key<<"  "<<tree_2->right->key;
   }
        
   system("pause");
   return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2010, 01:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблемы с выводом бинарного дерева (C++):

Запись бинарного дерева в файл и восстановление из него этого дерева - C++
Задача такая: есть бинарное дерево. Каждый элемент дерева содержит 3 указателя - 1 указатель на структуру с данными, 2 и 3й указатель на...

Написать шаблон бинарного дерева с функцией распечатки дерева - C++
Не понимаю, что от меня хотят. Дано такое задание: Написать шаблон бинарного дерева с функцией распечатки дерева *(+(d,e),c) в виде...

Создание бинарного дерева из бинарного файла - C++
struct Bin { string name; string city; int players; int score; }; void ReadFromBin(Point*&amp; Tree) { Bin q;

Построение бинарного дерева на основе не бинарного - C++
В лабораторной работе есть такое задание: Создайте процедуру построения бинарного дерева на основе не бинарного. Объясните как вообще...

Вывод бинарного дерева на экран в виде "дерева" - C++
основная задача: подсчет количества листьев. проблема: при просмотре хочу выводить бин. дерево, в красивом виде, возможно использование...

Что-то не то с выводом сохранённых данных из бинарного файла - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; using namespace std; FILE...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
03.10.2010, 07:53 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        else {
              cout << "Дерева не дзеркально подiбнi!!!" << endl;
              cout << "tree_1 -> "
                       << tree_1->key
                       << "  "
                       << tree_1->left->key
                       << "  "
                       << tree_1->right->key
                       << endl;
                       
              cout << "tree_2 -> "
                       << tree_2->key
                       << "  "
                       << tree_2->left->key
                       << "  "
                       << tree_2->right->key
                       << endl;
        }
Добавлено через 2 минуты
C++
1
2
    if ((tree_1==NULL&&tree_2==NULL)||(tree_1!=NULL&&tree_2!=NULL))
        if ((tree_1->left==tree_2->right)||(tree_1->right==tree_2->left))
это как, если деревья равны NULL, то разыменовывать первое и взять в нём левый узел
0
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
03.10.2010, 22:17  [ТС] #3
Цитата Сообщение от accept Посмотреть сообщение
это как, если деревья равны NULL, то разыменовывать первое и взять в нём левый узел
если деревья пустые, или не пустые, то проверяем равно ли правое поддерево первого дерева левому поддерева второго дерева.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.10.2010, 01:29 #4
ну, как ты проверишь правое поддерево, если дерева нет
если дерева нет, то у него нельзя рассмотреть поддерево
0
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
04.10.2010, 11:43  [ТС] #5
А как тогда быть?
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.10.2010, 13:31 #6
Два бинарных дерева зеркально подобны, если либо оба они пусты
C
1
if (t1 == NULL && t2 == NULL)
либо оба непустые, и при этом левое поддерево одного из них подобно
правом поддерево другого и наоборот
C
1
2
3
4
5
6
7
    if (t1 == NULL && t2 == NULL)
        ;
    else if (t1 != NULL
          && t2 != NULL
          && is_similar(t1->left, t2->right)
          && is_similar(t1->right, t2->left))
        ;
1
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
05.10.2010, 22:18  [ТС] #7
Какая библиотека для функции is_similar?

Добавлено через 1 час 57 минут
Подскажыте, в чем сдесь ошыбка, голову уже 2 часа ломаю, не могу вывести поддерево?

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{ int i=1;
  time_t srand(time(NULL)); 
  setlocale( LC_ALL,"Russian" );
  trees tree_1=NULL;
  tree_1 = new Node;
  tree_1->key=5;
  tree_1->left->key=6;
  cout<<tree_1->left->key; 
  system("pause");
   return 0;
}
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
05.10.2010, 22:20 #8
Цитата Сообщение от MILAN Посмотреть сообщение
time_t srand(time(NULL));
Что вы хотели сказать этой строкой? Зачем нужно time_t?
0
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
05.10.2010, 22:24  [ТС] #9
Ето неважно, просто я взял кусок програмы!! Строка надо для заполнения елементов дерева рандомом, смотрите выше!!! Я незнаю как правильно обратится к поддереву, вроде ошыбок нет, а ничего не выводит!!!!
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
05.10.2010, 22:24 #10
MILAN, очень важно, потому что это строка не работает.
0
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
05.10.2010, 22:25  [ТС] #11
Цитата Сообщение от gooseim Посмотреть сообщение
Зачем нужно time_t?
Без него компилятор выдавал:

warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
05.10.2010, 22:26 #12
MILAN, компилятор другое имел ввиду:
C++
1
srand((unsigned)time(NULL));
1
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
05.10.2010, 22:27  [ТС] #13
Спасибо, но может у вас есть какие варианты решение моей проблемы по поводу вывода?
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
05.10.2010, 22:29 #14
Прежде, чем что-то делать с указателем на объект, этот объект нужно создать. А вы этого категорически не делаете. Поэтому ничего и не работает.
0
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
05.10.2010, 22:33  [ТС] #15
Так я ведь создаю дерево, и поддерево!!!
C++
1
2
  trees tree_1=NULL;
  tree_1 = new Node;
Добавлено через 1 минуту
Если вам не трудно, приведите маленький примерчик!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2010, 22:33
Привет! Вот еще темы с ответами:

Считывание из бинарного файла в структуру с последующим выводом - C++
В бинарном файле храниться инфа: Имя_пользователя дата_подключения номер Имя_пользователя дата_подключения номер и т.д. Есть...

Шаблон бинарного дерева - C++
Здравствуйте. Есть одна проблема и не получается её решить, надеюсь вы поможите. Делаю шаблон бинарного дерева. По сути сделал только...

Запись бинарного дерева - C++
Всем привет! Нужно записать следующий массив (вверху картинки) в бинарное дерево, которое имеет структуру, которая на картинке во...

Реализация бинарного дерева С++ - C++
Доброго времени суток, уважаемые форумчане. Возник вопрос по реализации бинарного дерева на С++, а именно с методом удаления элемента в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.10.2010, 22:33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru