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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как написать конструктор копирования 
:(
    Опции темы
PNNA
Дата 20.2.2016, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



#include <iostream>
#include <fstream>
using namespace std;
struct item
    {
        int i;
        item* father;
        item* lson;
        item* rson;
        item() {lson=rson=NULL;}
    };
class derevo
{
private:    
    item* root;    
public:
    derevo();    
    bool find(int, item* &);
    bool findy(int, int&);
    bool insert(int);
    void prosh();
    void prosmotr(item* &, void vizit(item* &));
    void erasef(item* &);
    bool erase(int);
};
derevo::derevo()
{
    root=NULL;
}
bool derevo::find(int m,item* &yuo)
{
    if(root==NULL)
    {
        yuo=NULL;
        return false;
    }
    yuo=root;
    while(1)
    {
        if(yuo->i==m)
            return true;
        if(yuo->i>m)
        {
            if(yuo->lson==NULL)
                return false;
            yuo=yuo->lson;
        }
        else
        {
            if(yuo->rson==NULL)
                return false;
            yuo=yuo->rson;
        }
    }
}
bool derevo::findy(int m,int &i)
{
    if(root==NULL)
    {        
        return false;
    }
    item* yuo=root;
    while(1)
    {
        if(yuo->i==m)
        {
            i++;
            return true;
        }
        if(yuo->i>m)
        {
            i++;
            if(yuo->lson==NULL)
                return false;
            yuo=yuo->lson;
        }
        else
        {
            i++;
            if(yuo->rson==NULL)
                return false;
            yuo=yuo->rson;
        }
    }
}
bool derevo::insert(int p)
{
    item *q, *r;
    if((find(p,r))==true)
        return false;
    q=new item;
    q->i=p;
    if(r==NULL)
    {
        root=q;
        q->father=NULL;
    }
    else
    {
        q->father=r;
        if(r->i<p)
            r->rson=q;
        else
            r->lson=q;
    }
    return true;
}
void vizit(item* &p)
{
    cout << p->i << " ";
}
void derevo::prosh()
{
    prosmotr(root,vizit);
}
void derevo::prosmotr(item* &mhj, void vizit(item* &mhj))
{
    if(mhj!=NULL)
    {
        prosmotr(mhj->lson,vizit);
        vizit(mhj);
        prosmotr(mhj->rson,vizit);
    }
}
void derevo::erasef(item* &c)
{
    item* m;
    if(c->lson!=NULL)
        m=c->lson;
    else
        m=c->rson;
    if(m!=NULL)
        m->father=c->father;
    if(c->father==NULL)
        root=m;
    else
    {
        if((c->father)->lson==c)
            (c->father)->lson=m;
        else
            (c->father)->rson=m;
    }
    delete c;
    c=NULL;
}
bool derevo::erase(int inf)
{
    item *q, *r;
    if((find(inf,r))==false)
        return false;
    if((r->lson!=NULL)&&(r->rson!=NULL))
    {
        q=r->rson;
        while(q->lson!=NULL)
            q=q->lson;
        r->i=q->i;
        erasef(q);
    }
    else
        erasef®;
    return true;
}
int main()
{
    freopen("D:\\pushy.txt", "w", stdout);
    ifstream fin("D:\\push.txt");
    derevo j;
    char ind;
    while(fin>>ind)
    {
        int u,i=0;
        if((ind=='I')||(ind=='D')||(ind=='F'))
            fin>>u;
        switch(ind)
        {
        case 'I': j.insert(u); break;
        case 'D': j.erase(u); break;
        case 'F': j.findy(u,i); break;
        case 'L': j.prosh(); break;
        }        
    }    
}
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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