Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ded_Vasilij
231 / 213 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
#1

Шаблоны (упорядоченные бинарные деревья поиска вещественных чисел, линейных многочленов и двоичных строк) - C++

01.05.2013, 17:52. Просмотров 899. Ответов 3
Метки нет (Все метки)

Добрый вечер всем. Понимаю, что вопрос заезженный, но тем не менее, я вынужден создать тему. Задача -
Имеется необходимость работать с упорядоченными бинарными
деревьями поиска вещественных чисел, линейных многочленов и двоичных строк.
Двоичная строка --- это строка из 0 и 1, их можно сравнивать
в лексикографическом порядке. Линейный многочлен ax+b меньше многочлена
cx+d, если пара <a,b> меньше пары <c,d> в лексикографическом порядке.
Разработайте набор классов, позволяющих работать с такими объектами.
Для деревьев предусмотреть методы: вставка и удаление элемента в дерево, вывод
дерева в поток по уровням (от корня к листьям), ввод из
потока, метод, возвращающий путь в дереве от корня к элементу x
в виде динамического массива элементов.

Проблема - не могу сообразить как правильно организовать работу с шаблонами - сами функции написать не проблема - алгоритмы стандартные.
А вот с шаблонами пока не подружился - вроде бы все просто, но нужен направляющий импульс.
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
template <class T>
class Tree
{
    struct tree
    {
        tree* Left;
        tree* Right;
        T Key;
    };
    tree* root;
public:
    
    Tree();
    virtual ~Tree();
    void Destroy(tree*& Root);
    void Add(T val);
    
};
 
template <class T>
Tree<T>::Tree():root->Left(0),root->Right(0),root->Key(0)
{
 
}
template <class T>
void Tree<T>::Destroy(tree*& Root)
{
    if(!Root)
    {
        return;
    }
    Destroy(Root->Right);
    Destroy(Root->Left);
}
На данном этапе не могу сообразить, где взять корень для передачи в Destroy(tree*& Root)
Передавать туда приватный root - но я же не буду иметь к нему доступа из мэйна.
С остальными функциями аналогичная проблема.
И еще, не могу сообразить как работать с шаблонами в мэйне.
Вроде и книжки умные читал...
Короче - или я дурак, или лыжи не едут...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2013, 17:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблоны (упорядоченные бинарные деревья поиска вещественных чисел, линейных многочленов и двоичных строк) (C++):

Бинарные деревья поиска - C++
Здравствуйте. Помогите решить задачу. Написать функцию, которая удаляет из бинарного дерева поиска T вершины с максимальным и минимальным...

Бинарные деревья поиска. Вычислить высоту (Некорректно вычисляется :с ) - C++
Код рабочий, но выдает некорректную высоту дерева, где я затупил, уже и понять не могу -.- Помогите пожалуйста, я вас небесными пряниками...

Распечатать, посчитать среднее арифметическое, преобразовать в дерево поиска [Бинарные деревья] - C++
Дано идеально сбалансированное дерево. Не выводиться дерево:(... Не понимаю как пройтись по элементам. Из за этого не понимаю как...

Бинарные файлы. Написать функцию, которая записывает в бинарный файл N случайных вещественных чисел в указанном диапазоне - C++
Добрый день! Подскажите пожалуйста! Генерирую рандомное кол-во вещественных чисел, и записываю их в бинарный файл, после чего читаю...

Перегрузка операций для класса целых двоичных чисел в виде строк - C++
нужна ваша помощь, пожалуйста Создать класс, который запоминает целые двоичные числа в виде строк. Перегрузить операции +, ++ и +=.

Бинарные деревья на С++ - C++
пишу программу в Dev-C++ для работы с бинарными деревьями. возникла такая проблема: функция FindTree возвращает отрицательное значение,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 18:37 #2
Ded_Vasilij, можно сделать функции-хелперы

C++
1
2
3
void Destroy_Helper(tree*& Root){
            Destroy(tree Root);
}
и уже ее можно вызывать из мейна
0
Qazan
211 / 59 / 9
Регистрация: 30.04.2013
Сообщений: 797
Записей в блоге: 10
01.05.2013, 19:35 #3
)))
Эти функций должны быть в привате класса )))
ты их должен вызывать в нормальном дестрое


~Tree()
{
Destroy(root);
этот же родной root))
}

в мэине зачем вызывать деструктор - это классовский сам вызовется
0
Ded_Vasilij
231 / 213 / 15
Регистрация: 01.09.2012
Сообщений: 2,103
01.05.2013, 20:09  [ТС] #4
Qazan, это вроде понятно, а вот допустим добавление элемента- там же тоже рекурсия
Как ее вызывать что на вход подавать? Тот же root? Как вообще это в мейне организовать все?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2013, 20:09
Привет! Вот еще темы с ответами:

Бинарные деревья - C++
Возникла проблема с бинарными деревьями . Нужно определить K - количество узлов, ключ которых больше заданного числа N. Я дошёл только до...

Бинарные деревья - C++
На с++ с объектно-ориентированным подходом(тоисть с помощю класов) нужно представить арифметическое выражение типа 3*((7+1)/4)+(17-5) в...

бинарные деревья - C++
Вершина двоичного дерева содержит указатель на строку и указатели на правое и левое поддеревья. Строки в дереве упорядочены по возрастанию....

Бинарные деревья - C++
Подсчитать количество элементов на n-уровне бинарного дерева. Подскажите как можно решить используя любой обход в глубину но без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.05.2013, 20:09
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru