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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2018, 15:35   #1
Полина Бурдыкина
 
Регистрация: 20.12.2014
Сообщений: 4
По умолчанию Бинарное дерево

Добрый день! Помогите пожалуйста с программой. Мне дали вот такое задание: Cпроектировать структуру типа бинарное дерево. Хранилище данных – статический массив. Порядок обхода – левое поддерево-правое поддерево- узел.
Я сделала программу, но у меня там нет статического массива, не знаю как сделать, только с клавиатуры 7 значений ввожу и всё и он мне выдает порядок обхода.

Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
 
//СТРУКТУРА
struct Node
{
    Node *l,*r; //левое и правое поддерево
    int x; //
};
 
//ФУНКЦИЯ ДОБАВЛЕНИЯ ЗВЕНА В ДЕРЕВО
void add(int x,Node *&MyTree) //Функция добавления звена в дерево
{
    if (NULL==MyTree)  //Если дерева нет
    {
        MyTree=new Node; //Выделяем память под звено дерева
        MyTree->x=x; //Записываем данные в звено
        MyTree->l=MyTree->r=NULL; //Подзвенья инициализируем пустотой во избежание ошибок
    }
 
                   if (x<MyTree->x)   //Если нововведенный элемент x меньше чем элемент x из семечка дерева, уходим влево
                      {
                          if (MyTree->l!=NULL) add(x,MyTree->l); //При помощи рекурсии записываем элемент на свободный участок
                          else //Если элемент получил свой участок, то
                          {
                              MyTree->l=new Node;  //Выделяем память левому подзвену.
                              MyTree->l->l=MyTree->l->r=NULL; //У левого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
                              MyTree->l->x=x; //Записываем в левое подзвено записываемый элемент 
                          }
                      }
                 
                    if (x>MyTree->x)   //Если нововведенный элемент x больше чем элемент x из семечка дерева, уходим вправо
                      {
                          if (MyTree->r!=NULL) add(x,MyTree->r); //При помощи рекурсии записываем элемент на свободный участок
                          else //Если элемент получил свой участок, то
                          {
                              MyTree->r=new Node;  //Выделяем память правому подзвену.
                              MyTree->r->l=MyTree->r->r=NULL; //У правого подзвена будут свои левое и правое подзвенья, инициализируем их пустотой
                              MyTree->r->x=x; //Записываем в правое подзвено записываемый элемент 
                          }
                      } }
 
//обратный обход
 
void Show(Node *&tree)
{
    if (NULL==tree)    return;    //Если дерева нет, выходим
   
    Show(tree->l); //Обошли левое поддерево 
    Show(tree->r); //Обошли правое поддерево  
    cout<<tree->x<<endl; //Посетили узел 
}
 
void main()
{
    int x; //
    Node *MyTree=NULL; //Указатель на структуру. Инициализируем во избежание ошибок
 
  for (int i=0;i<7;i++) //В дереве будет 7 узлов
  {
      cout<<"X = "; cin>>x; //Ввели X с клавиатуры
      add(x,MyTree); //Добавили X в дерево
  }
  Show(MyTree); //Обошли дерево и показали его звенья в линейном порядке
  system("pause");
}

Последний раз редактировалось Аватар; 23.03.2018 в 15:39.
Полина Бурдыкина вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бинарное дерево NataliaShipaeva Помощь студентам 1 17.06.2013 15:32
Бинарное дерево С++ Tclass Общие вопросы C/C++ 10 06.06.2013 09:27
Бинарное дерево) Svetlanka_ya Паскаль, Turbo Pascal, PascalABC.NET 1 17.04.2010 12:35
бинарное дерево СИ Anastasia.K Помощь студентам 0 31.10.2009 18:16
Бинарное дерево lubafffka Общие вопросы C/C++ 0 29.04.2009 12:28