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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2015, 22:12   #1
Дана188
Пользователь
 
Регистрация: 14.10.2014
Сообщений: 21
По умолчанию Бинарное дерево

Код:
#include "stdafx.h"
#include<iostream>
using namespace std;
 
template <class T, class I> class node
{
private:
    T x; //ключ
    I info;//информация
    node* LL; //left link
    node* RL; //right link
public:
    node(){ x = 0; LL = 0; RL = 0; };
    ~node()
    {
        if (LL) LL->~node();
        if (RL) RL->~node();
        if (LL) { delete LL; LL = 0; }
        if (RL) { delete RL; RL = 0; }
    }
    void putx(T new_x, I new_info){ this->x = new_x; this->info = new_info; }
    void null_leftlink(){ this->LL = 0; }
    void null_rightlink(){ this->RL = 0; }
    void add(T new_x, I new_info)
    {
        if (LL && (new_x < x)) LL->add(new_x, new_info);
        if (RL && (new_x > x)) RL->add(new_x, new_info);
 
        if (!LL && (new_x < x))
        {
            node* N = new node;
            N->x = new_x;
            N->info = new_info;
            N->LL = 0;
            N->RL = 0;
            LL = N;
        }
        if (!RL && (new_x > x))
        {
            node* N = new node;
            N->x = new_x;
            N->info = new_info;
            N->LL = 0;
            N->RL = 0;
            RL = N;
        }
    }
    void print(int tab)
    {
        if (RL) RL->print(tab + 1);
        for (int i = 1; i != tab; i++)cout << "  "; cout << this->x << "-" << this->info << endl;
        if (LL) LL->print(tab + 1);
    }
    void del_all()
    {
        if (LL) LL->del_all();
        if (RL) RL->del_all();
        if (LL) { delete LL; LL = 0; }
        if (RL) { delete RL; RL = 0; }
    }
    void del(T x_to_del)
    {
        if (LL) LL->del();
        if (RL) RL->del();
        //не дописано еще.
    }
    I get(T getx)
    {
        if (getx == x) return info;
        if (LL && (getx < x)) return LL->get(getx);
        if (RL && (getx > x)) return RL->get(getx);
    }
};
 
template <class T, class I> class tree
{
private:
    node <T, I>* link;
public:
    tree(){ link = 0; };
    ~tree(){ if (link)link->~node<T, I>(); delete link; link = 0; };
    void add(T new_x, I new_info)
    {
        if (link) link->add(new_x, new_info);
        else
        {
            node<T, I>* N = new node<T, I>;
            N->putx(new_x, new_info);
            N->null_leftlink();
            N->null_rightlink();
            link = N;
        }
    };
    void print(){ if (link)link->print(1); else cout << "No tree existing\n"; }
    void del_all(){ if (link) link->del_all(); delete link; link = 0; }
    void del(int x){ if (link)link->del(x); };
    I get(T x){ if (link) return link->get(x); else cout << "No elements existing\n"; }
};
 
int main()
{
    system("cls");//clear screen
    tree <int, char> *T = new tree <int, char>; // создание дерева
    //menu
    int choos = 0;
    const int exit = 6;
    cin >> choos;
    while (choos != exit)
    {
        cout << "Hello! This is a 'tree' example\n"
            "There is a menu for you to choos:\n"
            "  1-add;\n"
            "  2-use destructor;\n"
            "  3-print;\n"
            "  4-delete all;\n"
            "  5-get element;\n"
            "  6-exit;\n"
            "enter-> ";
        switch (choos){
        case 1: {
                    int key; //ключ.
                    char val; //значение
                    cout << "enter key: "; cin >> key;
                    cout << "enter int value: "; cin >> val;
                    T->add(key, val);
                    break;
        }
        case 2: T->~tree(); break;
        case 3: T->print(); break;
        case 4: T->del_all(); break;
        case 5:{
                   cout << "what is key of element? ";
                   int key = 0;
                   cin >> key;
                   cout << "there it is: " << T->get(key) << endl;
                   break; }
        default: if (choos != exit)cout << "wrong int value " << choos << endl;
        }
При вводе value больше двух букв программа залипает. В чем проблема?

Последний раз редактировалось Вадим Мошев; 06.05.2015 в 22:18.
Дана188 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не бинарное дерево LOST94 Visual C++ 0 09.04.2013 22:23
Бинарное дерево dima12494 Общие вопросы C/C++ 0 01.05.2012 19:36
Бинарное дерево С++ Dfoer Фриланс 1 02.12.2011 12:49
Бинарное дерево DTroy Visual C++ 1 22.11.2011 21:09
Бинарное дерево. amsask Помощь студентам 1 29.04.2010 21:25