Форум программистов, компьютерный форум 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) по этому вопросу, однако так и не разобрался. Еще раз перепишу задачку "Разработать класс на языке С++...
C++ Числа Спрага-Грюнди http://www.cyberforum.ru/cpp-beginners/thread1192501.html
Разработать программную модель следующей игры двух игроков (пользователь-компьютер), реализовав выигрышную стратегию для пользователя: На стол выкладываются 50 спичек. Каждый игрок по очереди...
C++ Конструктор копирования есть класс, в нем есть указать на участок памяти, как написать для этого класс конструктор копирования? как работает конструктор с указателями? подробнее

Показать сообщение отдельно
Vashtanerada
1 / 1 / 0
Регистрация: 29.11.2012
Сообщений: 142

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

29.05.2014, 16:26. Просмотров 669. Ответов 9
Метки (Все метки)

Здравствуйте, уважаемые специалисты!
Вынуждена просить у вас помощи, ибо самой справиться не получается.
Имеется задание:
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.
Ошибок не выдает, все прекрасно выводит, но выводит то же самое дерева которое имелось ранее.

Будьте добры, подскажите, что я делаю не так и как исправить сложившуюся ситуацию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru