Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Работа с деревьями, подключить функцию удаления листочка 
:(
    Опции темы
redrover
Дата 12.4.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 6.3.2009
Где: Тульская область

Репутация: нет
Всего: 1



Собственно, программа почти готова. Как ни странно, не могу доработать удаление узла... 

Код

#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
//--------------------------
struct  ElemT
{
   int Sod;
   ElemT* pLeft;
   ElemT* pRight;
}*pHead = NULL;
void AddUzel(ElemT* pCur,int value) {     // добавление конкретного узла дерева
    if(value < pCur->Sod)
        { if(pCur->pLeft != NULL)         // если значение меньше, двигаемся по "левой ветке"
              AddUzel(pCur->pLeft, value);
          else
          {  pCur->pLeft = new ElemT;
             pCur->pLeft->Sod = value;
             pCur->pLeft->pLeft=NULL;
             pCur->pLeft->pRight=NULL;
          }
        }
    if(value > pCur->Sod)                 // иначе, двигаемся по правой 
        { if(pCur->pRight != NULL)
             AddUzel(pCur->pRight, value);
          else
           {
             pCur->pRight = new ElemT;
             pCur->pRight->Sod = value;
             pCur->pRight->pLeft=NULL;
             pCur->pRight->pRight=NULL;
           }
        }
    if(value == pCur->Sod)                
        { cout<<value<<" is already in tree"<<endl;
          return;
        }
}
void Add2Tree(int value)                  // проверка, не пустое ли дерево
{
    if(pHead == NULL)                     // если дерево пустое - создадим первый узел
     {
        pHead = new ElemT;
        pHead->Sod = value;
        pHead->pLeft=NULL;
        pHead->pRight=NULL;
        return;
     }
    AddUzel(pHead, value);                // если в макушке уже что-то есть - добавляем слева или справа 
}
//---------------------------
// в итоге получае упорядоченное дерево, то есть меньшие элементы расположены 
// "слева", а большие - "справа". Рекурсивно распечатываем это дерево от меньшего 
// элемента к большему
void PrintTree(ElemT* pCur)
{
    if (pCur!=NULL)
    {
        PrintTree(pCur->pLeft);
        cout<< pCur->Sod<<' ';
        PrintTree(pCur->pRight);
    }
}
void create_new (ElemT *pHead)
{
        std::cout << "Введите лист: ";
        int n;
        std::cin >> n;
        Add2Tree(n);
}
//---------------------------
int main()
{
    setlocale(LC_ALL, "");
    char c;
    std::cout << "\t___..Командное меню..___" << endl << endl;
    std::cout << "1 - новый лист;" << endl;
    std::cout << "2 - распечатать дерево;" << endl;
    std::cout << "q - выход из программы." << endl;
    std::cout << "Введите команду для управления программой: ";
    while (c != 'q'){
        std::cin >> c;
        switch(c){
        case '1':
            create_new (pHead);
        break;
        case '2':
            std::cout << "---------------------------" << endl;
            PrintTree(pHead);
            std::cout << endl << "---------------------------" << endl;
        break;
        case 'q':
            return 0;
        break;
        }std::cout << "Команда: ";}
    return 0;
}



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0372 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.