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

Бинарное дерево - C++

Восстановить пароль Регистрация
 
GetLucky
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 87
20.11.2014, 00:53     Бинарное дерево #1
Здравствуйте, нужно помощь в написании программы.
Условие:

Каждая вершина бинарного дерева содержит:
- 2 указателя (на каждый альтернативный путь поиска - на поддерево);
- данные - указатель на объект, содержащий данные, принадлежащие этой вершине.

Каждая вершина содержит 3 поля: поле данных и два поля указателей на другие вершины. Левый указатель служит для ссылки на вершину нижнего уровня, а правый - на соседнюю вершину того же уровня. Указателям, не ссылающимся на другие вершины, присваивается значение NULL(Крестики на рисунке).

В вершинах должны содержаться такие данные:
Информация о спортивной команде:
- название
- город
- кол-во игр
- кол-во очков ( Выиграно игр, проиграно игр, ничья)
- кол-во игроков
Миниатюры
Бинарное дерево  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2014, 00:53     Бинарное дерево
Посмотрите здесь:

Бинарное дерево C++
C++ Бинарное дерево
бинарное дерево C++
Бинарное дерево C++
Бинарное дерево C++
C++ Дерево бинарное
Бинарное дерево. С++ C++
Бинарное дерево C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetLucky
0 / 0 / 0
Регистрация: 03.09.2014
Сообщений: 87
20.11.2014, 21:13  [ТС]     Бинарное дерево #2
Кто-то поможет?

Добавлено через 48 минут
Мои наработки. Нужно доработать ввод данных(внести все в структуру), удаление конкретного элемента дерева и вывод сообщения, если элемент дерева конечный(указывает на NULL), вывод дерева как "дерево" (A->B->C)

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <stdio.h>
#include <string.h>
 
typedef int newtp;
struct node
{
    newtp data;
    node *left;
    node *right;
}   *head=NULL;
 
//фукция сравнивания элементов
int compare(newtp a,newtp b)
{
    return (int)a>(int)b?1:(int)a==(int)b?0:-1;
}
 
//добавить узел в дерево
void add(node *&t,newtp dt)
{
    //создаём уэел и добавляем к концу ветки
    if(t==NULL)
    {
        t=new node;
        t->data=dt;
        t->left=t->right=NULL;
        return ;
    }
    //сравниваем два значения и выбираем к какой ветки добавить к левой или правой
    if(compare(t->data,dt)==1)
    add(t->left,dt);
    else
    add(t->right,dt);
}
 
node* search(node *t,newtp dt)//поиск узла
{
    if(t==NULL) return NULL;// ветка пуста
    if(compare(t->data,dt)==0) return t;
    if(compare(t->data,dt)==1)//сравниваем два значения и выбираем по какой ветки продолжать поиск левой или правой
    search(t->left,dt);
    else
    search(t->right,dt);
}
 
//удалить все элементы из дерева
void clean(node *t)
{
    if(t==NULL)return ;
    clean(t->left);
    delete t;
    clean(t->right);
}
 
//просмотр элементов дерева
void view(node *t)
{
    if(t==NULL)return ;
    view(t->left);
    printf ("Value=%d \n",(int)t->data);
    view(t->right);
}
 
int main(int args,char *argv[])
{
    char command[10];
    int znach;
    while(1)
    {
    printf ("Enter command : \n");
    scanf("%s",command);
        if(strcmp(command,"end")==0)
        {
        printf ("Exit :\n");
        break;
        }
        else if(strcmp(command,"add")==0)//добавить
        {
        printf ("Enter value :\n");
            if(scanf("%d",&znach))
            {
                if(head!=NULL)
                {
                node *t=head;
                add(t,(int)znach);
                }
                else
                add(head,(int)znach);
            }
        }
        else if(strcmp(command,"search")==0)//поиск элемента по значению
        {
        printf ("Enter value :\n");
            if(scanf("%d",&znach))
            {
            node *t=head;
            t=search(t,znach);
                if(t==NULL)//если не найден
                printf ("not found\n");
                else
                printf ("Value=%d\n",(int)t->data);
            }
        }
        else if(strcmp(command,"view")==0)//просмотр
        {
        node *t=head;
        view(t);
        }
        else if(strcmp(command,"clean")==0)//очистить
        {
        clean(head);
        head=NULL;
        printf ("List empty!\n");
        }
        else
        {
        printf ("Unknown command :\n");
        }
 
    }
    clean(head);
    head=NULL;
    return 0;
}
Yandex
Объявления
20.11.2014, 21:13     Бинарное дерево
Ответ Создать тему
Опции темы

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