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

Преобразование идельно сбалансированного дерева в дерево поиска - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Векторный калькулятор на классах http://www.cyberforum.ru/cpp-beginners/thread1192602.html
Привет всем. Преподаватель дал задание, написать векторный калькулятор на классах. На массивах в консоли я сделал для 4 операций, но как теперь переписать его на классы, используя перегрузку функций итд, не могу понять. Прошу помощи от сообщества. Буду признателен, если будет готовое решение хотя бы для одной операции или хотя бы подсказки, что загонять в классы
C++ будьте добры правильная программа надо( 4. Определить номера строк матрицы R, хотя бы один элемент которых равен с, и элементы этих строк умножить на d. http://www.cyberforum.ru/cpp-beginners/thread1192583.html
C++ C++ try catch throw в разных функциях
try и catch находятся в одной функции а throw вызывается из другой. ну MVS выкидывает исключение вместо передачи управления. что делать? проект консольный, не CLI Добавлено через 1 минуту даже если они находятся в одной функции, передача управления не происходит
Треугольник в С++ C++
Добрый день! Я уже обращался к Вам (http://www.cyberforum.ru/cpp-beginners/thread1158188.html) по этому вопросу, однако так и не разобрался. Еще раз перепишу задачку "Разработать класс на языке С++ реализующий методы для работы с треугольником: построение треугольника, вычисление периметра, площади, длин сторон". Если вкратце, то все, до чего я дошел, это то, что: 1. Раз надо найти длины...
C++ Числа Спрага-Грюнди http://www.cyberforum.ru/cpp-beginners/thread1192501.html
Разработать программную модель следующей игры двух игроков (пользователь-компьютер), реализовав выигрышную стратегию для пользователя: На стол выкладываются 50 спичек. Каждый игрок по очереди вынимает спички из кучи, по меньшей мере, 1 и не более 6. Кто берет последнюю спичку, тот выигрывает. С выйгрышной ситуацией, при которой мы оставляем противнику число спичек, кратное 7, мы разобрались....
C++ Конструктор копирования есть класс, в нем есть указать на участок памяти, как написать для этого класс конструктор копирования? как работает конструктор с указателями? подробнее

Показать сообщение отдельно
Vashtanerada
1 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 142
29.05.2014, 16:26     Преобразование идельно сбалансированного дерева в дерево поиска
Здравствуйте, уважаемые специалисты!
Вынуждена просить у вас помощи, ибо самой справиться не получается.
Имеется задание:
1. Формирование однонаправленного списка;
2. Печать однонаправленного списка;
3. Удаление всех элементов с четными номерами;
4. Удаление однонаправленного списка из памяти;
5. Формирование двунаправленного списка;
6. Печать двунаправленного списка;
7. Добавление в список элементов с нечетными номерами;
8. Удаление двунаправленного списка из памяти;
9. Формирование идеально сбалансированного бинарного дерева;
10. Печать бинарного дерева;
11. Поиск максимального элемента в дереве;
12. Преобразовать бинарное дерево в дерево поиска;
С первого по одиннадцатое задания я благополучно выполнила, осталось преобразовать идеально сбалансированное дерево в дерево поиска.
Что такое дерево поиска я понимаю, но не могу понять как реализовать.
Знаю только, что фактически нужно сформировать новое дерево, используя значения из предыдущего.
Имеются кое какие наработки:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//Запись одного элемента
ISBD* Ferst_TT(int d)
{
    ISBD* p=new ISBD;
    p->data=d;
    p->left=0;
    p->right=0;
    return p;
}
 
ISBD* Trans_Tree(ISBD* beg, int d)
{
    ISBD* p=beg;
    ISBD* r;
//Проверяем существование элемента в дереве
    bool y=false;
    while(p&&!y)
    {
        r=p;
        if(d==p->data)
        {
            y=true;//элемент существует
        }
        else
        {
            if(d<p->data)
            {
                p=p->left;//идем в левое поддерево
            }
            else
            {
                p=p->right;//идем в правое поддерево
            }
        }
    }
        if(y)
        {
            return p;//элемет найден, не добавляем
        }
        //создание узла
        ISBD* New=new ISBD();//выделили память
        New->data=d;
        New->left=0;
        New->right=0;
        // если d<r->key, то добавляем его в левое поддерево
        //if(d<r->data)r->left=New;
        // если d>r->key, то добавляем его в правое поддерево
        //else r->right=New;
        return New;
}
Это сами функции

C++
1
2
3
4
5
6
7
8
case 12://system("cls");
        for (int i=0; i<=n; i++)
        {
            Ferst_TT(d);
            Trans_Tree(second, d);
        }
        Print_Tree(second,n);
        break;
А это, собственно попытка вызвать данные функции в main.
Ошибок не выдает, все прекрасно выводит, но выводит то же самое дерева которое имелось ранее.

Будьте добры, подскажите, что я делаю не так и как исправить сложившуюся ситуацию.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru