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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
kjahert
49 / 49 / 5
Регистрация: 08.04.2011
Сообщений: 124
#1

Дерево - C++

04.05.2011, 17:36. Просмотров 3101. Ответов 22
Метки нет (Все метки)

Условие:
Программа построения дерева, где узел(корень) - ФИО препода, а инф. поля (наверное левая\правая ветки) имеют записи: 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++
// derevo_lr2.cpp : Defines the entry point for the console application. #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std;...

Дерево - C++
Здравствуйте!Никак не могу разобраться с двумя заданиями. http://prntscr.com/9924ty - задание 1 http://prntscr.com/9924ys и вот к...

Дерево - C++
Добрый вечер)))) Вот сегодне &quot;изучали &quot;деревья&quot;)) Дали задание: &quot;Написать программу копирования вершин, связанных с правым...

N-дерево - C++
Дано N-дерево. Найти поддерево не включающее ни одну из заданных вершин. Вообще хотя бы &quot;Дано N-дерево&quot; - если вы кинете готовый код...

B-дерево - C++
Есть у кого реализация B-дерева на Си? хотя бы добавление и удаление)))) А то есть на Паскале, но перевести это для меня нереально)

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

насчёт add - класс изначально писался таким образом, что не содержал в себе ничего. А в связи с тем что человеку нужно было засовывать структуры вот я и прикрутил шаблон. В комментариях к setValue я написал, что её нету, кому надо тот и допишет. Поэтому нет ничего удивительного в том, что add добавляет по индексу пустой элемент.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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++
Всем здравствуйте! Помогите, пожалуйста. Необходимо в c++ сгенерировать 22 неповторяющихся трехзначных числа и составить поисковое дерево,...

Дерево поиска - C++
Здравствуйте, хочу написать set на базе КЧ-дерева, начал с обычного дерева и столкнулся с ошибками, буду очень благодарен за помощь. ...

многомерное дерево - C++
кто может создать многомерное дерево? просто для учебы. Например переделать из такого дерева 1 ...


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

Или воспользуйтесь поиском по форуму:
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     Дерево
Ответ Создать тему
Опции темы

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