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

Дерево - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
kjahert
48 / 48 / 5
Регистрация: 08.04.2011
Сообщений: 124
04.05.2011, 17:36     Дерево #1
Условие:
Программа построения дерева, где узел(корень) - ФИО препода, а инф. поля (наверное левая\правая ветки) имеют записи: 1)должность(string[10]), 2)предметы что преподает. Написать процедуру печати построеного бинарного дерева(полная инфа про препода)

Кто нибудь знает как выполнить это задание, т.е. как в корень записать симв. строку, какие if 'ы и while'ы использовать, в какую часть дерева записывать записи?

В наличии имеються функции добавления первого введенного элемента в корень и ввода остальных узлов и вывода дерева print_tree ну и структура с *left, *right и
некоторым d что похоже есть num

Добавлено через 55 секунд
По структуре надо
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
#include <iostream.h>
 
struct node
{
 int d;
 node *left;
 node *right;
};
node * first(int d);
node * search_insert(node *root, int d);
void print_tree(node *root, int l);
 
void main()
{
    int n, i, what;
    cout<<"input n \n";
    cin>>n;
    cout<<"input first what \n";
    cin>>what;
    node *root = first(what);
    for (i = 1; i<n; i++)
    {
    cout<<"input what \n";
    cin>>what;
    search_insert(root, what);
    }
    print_tree(root, 0);
 
}
 
node * first(int d)
{
    node *pv = new node;
    pv->d    = d;
    pv->left = 0;
    pv->right = 0;
    return pv;
}
 
node * search_insert(node *root, int d)
{
    node *pv = root, *prev;
    int found = 0;
    while (pv && !found){
       prev = pv;
       if   (d == pv->d) found = 1;
       else if  (d <  pv->d)pv     = pv->left;
       else         pv     = pv->right;
    }
    if (found) return pv;
    node *pnew  = new node;
    pnew->d     = d;
    pnew->left  = 0;
    pnew->right = 0;
    if (d < prev->d)
       prev->left  = pnew;
    else
       prev->right = pnew;
    return pnew;
}
 
void print_tree(node *p, int level)
{
    if (p)
    {
    print_tree(p->left, level+1);
    for (int i = 0; i<level; i++)
    cout << "    ";
    cout <<  p->d << endl;
    print_tree(p->right, level + 1);
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2011, 17:36     Дерево
Посмотрите здесь:

дерево C++
C++ Дерево...
C++ B-дерево
C++ Дерево
Напишите программу, которая бы читала дерево в формате (а) и затем печатала бы это дерево в формате (б). C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
20.05.2011, 14:25     Дерево #21
Цитата Сообщение от fasked Посмотреть сообщение
Метод size. Тут все просто, метод должен возвратить текущее количество элементов в дереве. Во всем дереве. Интересно, работает ли. Я не проверял, конечно, но закрадываются сомнения. Особенно с учетом того, что в самом TreeItem также лежит вектор. Я верю, что тут может быть хитрая схема индексации, но не доверяю.
не работал бы, если Tree состоял бы из TreeItem, но так как он у меня он состоит из TreeItem* то никаких проблем с этим нет. Да и проверить это легко

насчёт add - класс изначально писался таким образом, что не содержал в себе ничего. А в связи с тем что человеку нужно было засовывать структуры вот я и прикрутил шаблон. В комментариях к setValue я написал, что её нету, кому надо тот и допишет. Поэтому нет ничего удивительного в том, что add добавляет по индексу пустой элемент.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
20.05.2011, 14:32     Дерево #22
Цитата Сообщение от pito211 Посмотреть сообщение
кому надо тот и допишет
Если по Вашему это так просто, реализовать бинарное дерево, наследуя его n-арного, то покажите как это. Может быть тогда у Вас и получится что-то доказать, пока что это только пустые слова.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 14:37     Дерево
Еще ссылки по теме:

C++ Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой
C++ Дерево, бинарное дерево
C++ Дерево дерево, странное дерево

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

Или воспользуйтесь поиском по форуму:
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
20.05.2011, 14:37     Дерево #23
Цитата Сообщение от fasked Посмотреть сообщение
Метод size. Тут все просто, метод должен возвратить текущее количество элементов в дереве. Во всем дереве. Интересно, работает ли. Я не проверял, конечно, но закрадываются сомнения. Особенно с учетом того, что в самом TreeItem также лежит вектор. Я верю, что тут может быть хитрая схема индексации, но не доверяю.
не работал бы, если Tree состоял бы из TreeItem, но так как он у меня он состоит из TreeItem* то никаких проблем с этим нет. Да и проверить это легко

насчёт add - класс изначально писался таким образом, что не содержал в себе ничего. А в связи с тем что человеку нужно было засовывать структуры вот я и прикрутил шаблон. В комментариях к setValue я написал, что её нету, кому надо тот и допишет. Поэтому нет ничего удивительного в том, что add добавляет по индексу пустой элемент.

Добавлено через 32 секунды
и в моей библиотеке лежит такая версия size()

C++
1
2
3
4
size_type size() const
        {   // return length of sequence
        return (_Mysize);
        }
Yandex
Объявления
20.05.2011, 14:37     Дерево
Ответ Создать тему
Опции темы

Текущее время: 04:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru