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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2016, 13:13   #1
a_Alise
Новичок
Джуниор
 
Регистрация: 26.03.2016
Сообщений: 2
По умолчанию C++ для начинающих

Нужна помощь.
Написать программу на С++.
Дано бинарное дерево(заполняется с клавиатуры или из файла). Вывести значения всех вершин дерева в порядке обхода в ширину: вначале выводится корень, затем его потомки(слева направо), далее потомки второго уровня и тд.
Не могу сделать обход.
Код:
#include <iostream> 
 
using namespace std; 
 
struct node 
{ 
 int data; 
 int lvl; 
 node *right, *left; 
}; 
 
void Show(node *&MyTree) 
{ 
 if (MyTree != NULL) 
 { 
  if (MyTree->lvl == 0) 
  cout << MyTree->data << endl; 
  else 
  { 
   Show(MyTree->left); 
   Show(MyTree->right); 
   cout << endl; 
  } 
 } 
} 
 
void Create(int MyData, node *&MyTree, int level) 
{ 
 if (MyTree == NULL) 
 { 
  MyTree = new node; 
  MyTree->data = MyData; 
  MyTree->right = MyTree->left = NULL; 
  MyTree->lvl = level; 
 } 
 if (MyTree->left != NULL) 
 Create(MyData, MyTree->left, level+1); 
 else 
 { 
  MyTree->left = new node; 
  MyTree->left->left = MyTree->left->right = NULL; 
  MyTree->left->data = MyData; 
  MyTree->left->lvl = level; 
 } 
 if (MyTree->right != NULL) 
 Create(MyData, MyTree->right, level + 1); 
 else 
 { 
  MyTree->right = new node; 
  MyTree->right->left = MyTree->right->right = NULL; 
  MyTree->right->data = MyData; 
  MyTree->right->lvl = level; 
 } 
} 
 
void Del(node *&MyTree) 
{ 
 if (MyTree != NULL) 
 { 
  Del(MyTree->left); 
  Del(MyTree->right); 
  delete MyTree; 
 } 
} 
 
int main() 
{ 
 setlocale(LC_ALL, "rus"); 
 
 node *Tree = NULL; 
 int *massiv, n; 
 
 cout << "Количество элементов:\t"; 
 cin >> n; 
 massiv = new int[n]; 
 cout << "Введите элементы дерева:\n"; 
 for (int i = 0; i < n; i++) 
 { 
  cin >> massiv[i]; 
  Create(massiv[i], Tree, 0); 
 } 
 
 system("cls"); 
 cout << "Дерево в порядке обхода в ширину:\n";  
 Show(Tree); 
 
 
 Del(Tree); 
 delete[] massiv; 
 system("pause"); 
 system("cls"); 
 return 0; 
}

Последний раз редактировалось BDA; 26.03.2016 в 17:17.
a_Alise вне форума Ответить с цитированием
Старый 26.03.2016, 21:31   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Не очень понял вашего способа заполнения дерева. Обход в ширину:
Код:
void Show(node *&MyTree)
{
    list<node *> nodes = {MyTree};
    while (!nodes.empty()) {
        node *n = nodes.front();
        nodes.pop_front();
        if (n != NULL) {
            cout << n->data << endl;
            nodes.push_back(n->left);
            nodes.push_back(n->right);
        }
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 27.03.2016, 10:00   #3
a_Alise
Новичок
Джуниор
 
Регистрация: 26.03.2016
Сообщений: 2
Хорошо

Спасибо за помощь
a_Alise вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инструкция по созданию заготовки для 2D игр (для начинающих) 8Observer8 Gamedev - cоздание игр: Unity, OpenGL, DirectX 31 20.03.2023 02:01
Delphi для начинающих yana1213 Общие вопросы Delphi 0 15.05.2014 08:47
C++ для начинающих Haruko_ Помощь студентам 0 23.10.2012 21:41
С++ для начинающих Maxim1 Общие вопросы C/C++ 10 31.05.2010 00:22