Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
5 / 4 / 0
Регистрация: 18.10.2009
Сообщений: 69
1

Создание не бинарных деревьев

18.03.2011, 13:52. Показов 860. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Возникла небольшая сложность в создании не бинарных деревьев.
Смысл я понял: надо создать элемент с ключом и список или массив(как у меня) с его сыновьями.
вот код:
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//---------------------------------------------------------------------------
#pragma argsused
#pragma hdrstop
#include <tchar.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
using namespace std;
//---------------------------------------------------------------------------
//Задача 20. Найти поддерево не включающее ни одну из заданных вершин
//---------------------------------------------------------------------------
class Making
{
    private:
        int count;              //количество элементов дерева
        int sons;               //количество сыновей дерева
        bool f_sons;            //флаг идентификации корня дерева
        struct Tree             //структура дерева
        {
            int key;            //ключ
            Tree *arr;          //массив сыновей элемента
        };
        void processing(int count) //формирование эл-ов дерева
        {
            cout << "\nEnter the number of sons of the element (available "
                 << count-1
                 << ") : ";
            cin >> sons;
            while (sons < f_sons || sons > count-1) //обработка ввода
            {
                cerr << "Wrong input! Number of sons of the tree can not be"
                     << " less than 1 or you \nexceed the allowable number"
                     << " of sons\nRepeat\n> ";
                cin >> sons;
            }
            if(f_sons)
            {
                count--;
                f_sons = false; //прекращение обработки корня
                Tree *root = new Tree;
                root->key = count;    //присвоение ключа корню дерева
                root->arr = new Tree [sons];  //выделение памяти под его сыновей
                for(int i(0);i<sons;i++)
                {
                    count--;
                    root->arr[i] = *create_sons();
                }
            }
            if (count) processing(count);
        }
        Tree *create_sons()
        {
            Tree *temp = new Tree;
            temp->key = count;
            temp->arr = NULL;
            return temp;
        }
    public:
        void start();
        void show();
        ~Making();
};
//---------------------------------------------------------------------------
void Making::start()
{
    system("CLS");
    cout << "Welcome to the construction of binary trees.\n\n"
         << "Follow the instructions.\n\n"
         << "Enter the root of the tree. Attention!\nOn a selected number will"
         << " depend on the number of items in the subtrees.\nThus, the root "
         << "is recommended to choose based on the total number "
         << "of elements\nin the tree. \n\nInput: ";
    cin >> count;
    while (count < 1)  //обработка ввода
    {
        cerr << "Wrong input! Root of the tree can not be less than 0"
             << "\nRepeat\n> ";
        cin >> count;
    }
    f_sons = true;     //обрабатывать корень
    processing(count); //добавление элементов дерева в само дерево
}
void Making::show()
{
}
Making::~Making()
{
    cout << "\n\nPress enter to exit...";
}
//---------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
    Making tree;
    tree.start();
    tree.~Making();
    getch();
    return 0;
}
//---------------------------------------------------------------------------
Подскажите пожалуйста как дальше писать, а то корень с детьми я создаю, а как дальше просматривать не могу реализовать. Есть идея спрашивать у каждого листа нужны ли ему дети
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2011, 13:52
Ответы с готовыми решениями:

Слияние бинарных деревьев
Слияние - это функция выбора элемента из двух Берем два дерева; функцию, которая выбирает один...

Объединение 2-х бинарных деревьев в одно
Необходима функция объединения 2-х бинарных сбалансированных деревьев в одно.

Копирование и объединение бинарных деревьев
Всем здравствуйте, в университете на лабораторной работе дали задачу объединить 2 бинарных дерева....

Класс бинарных деревьев. Наследование
Доброго времени суток! Имеется задание написать абстрактный класс бинарного дерева и класс...

0
18.03.2011, 13:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2011, 13:52
Помогаю со студенческими работами здесь

Нужен совет по алгоритмам, обход бинарных деревьев
Всем привет! Вопрос может показаться немного глупым но все же: есть тема курсача &quot;Обход бинарных...

Создать функции ввода/вывод для бинарных деревьев
Не могу создать функции ввода/вывод для бинаных деревьев. очень срочно нужно! скажите где ошибка......

Массив: Учащиеся участвовали в посадке деревьев. Сколько деревьев было посажено
1)Учащиеся 8-х классов участвовали в посадке деревьев. 8-а посадил 100 деревьев, 8-б —122 дерева,...

Почему так(комбинации бинарных и не бинарных вводов и выводов)?
#include &lt;string&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru