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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2011, 16:19   #1
Vitalka
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 16
По умолчанию Бинарные деревья

Вершина дерева содержит указатель на строку и N указателей на потомков. Функция помещает две строки в дерево так, что строки с меньшей длиной располагаются ближе к корню. Если новая строка "проходит" через вершину, в которой находится более длинная строка, то новая строка занимает место старой, а алгоритм включения продолжается для старой строки. Функция включения выбирает потомки с минимальным количеством вершин в поддереве
Мне нужно сделать "графический вывод"(не в столбик)
Код:
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
struct node
{
        node **mas;
        int size;
        node(int, string*);
        int getzero();  
        void insert(string*);   
        void print();   
        string *p;
};
struct tree
{
        node* root;
        int size;
        tree(int x):size(x), root(0){}  
        void insert(string*);
        void print();
};
// Описание структур
node::node(int x, string* s)
{
        p = s;
        size = x;
        mas = new node*[size];  
        for( int i = 0; i < size; i++)
        {
                mas[ i ] = 0;
        }
}
int node::getzero()
{
        return count_if( mas, mas+size, [](node* x){ return !x; } );
}
void node::insert( string *x )
{
        if( x->size() < p->size() )
        {
                swap( *x, *p );
        }
 
        if( getzero() != 0 )
        {
                int ind = find_if( mas, mas+size, [](node* x){return !x;} ) - mas;              
                mas[ ind ] = new node( size, x );
        }
        else
        {
                int *temp = new int[size];      
                for( int i = 0; i < size; i++ )
                {
                        temp[ i ] = mas[ i ]->getzero();
                }
                int ind = max_element( temp, temp + size ) - temp;
                mas[ ind ]->insert( x );
        }
}
void node::print()
{
        cout << (*p).c_str() << "\n";
        for_each(mas, mas+size, [](node* x){if(x!=0)x->print();});
}
void tree::insert(string* p)
{
        if( root == 0)
        {
                root = new node( size, p );
        }
        else
        {
                root->insert(p);
        }
}
void tree::print()
{
        if ( root != 0 )
        {
                root->print();
        }
}
int main()
{
        int n;
        setlocale(0,"");
        cout << "Введите количество слов: ";
        cin >> n;
        
        tree t( n );
 
        for ( int i = 0; i < n; i++ )
        {
                string str;
 
                cout << "Введите слово: ";
                cin >> str;
 
                string *s = new string( str.c_str() );
                t.insert( s );
        }
        
        t.print();
}
Заранее спасибо!!!
Vitalka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бинарные деревья gilex Паскаль, Turbo Pascal, PascalABC.NET 7 23.06.2013 16:55
Бинарные деревья на Си++ osichev Помощь студентам 1 07.12.2009 23:31
Бинарные деревья Марсель059 Общие вопросы C/C++ 3 20.05.2009 21:47
Бинарные деревья Влдислаав3911 Помощь студентам 2 21.05.2008 23:39
бинарные деревья. ribka Помощь студентам 2 30.11.2007 18:13