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

Дерево

22.11.2015, 16:35. Показов 500. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, в которой выполнено формирование бинарного дерева; осуществлен обход построенного дерева в соответствии со своим вариантом; нахождение указанной вершины в дереве; добавление вершины в дерево; удаление вершины из дерева. Все перечисленные действия оформить в виде функций.
Вот мой вариант задания: Написать функцию, которая определяет,входит ли вершина, содержащая информационное поле E, в заданное бинарное дерево дважды.
Помогите доделать программу:
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
125
126
127
128
#include <iostream>
#include <random>
#include <time.h>
using namespace std;
 
struct BinaryTree
{
    int Data; //поле данных
    BinaryTree* Left; //указатель на левый потомок
    BinaryTree* Right; //указатель на правый потомок
};
 
BinaryTree* BTree = NULL;
//создание бинарного дерева
void Make_Binary_Tree(BinaryTree** Node, int n)
{
    BinaryTree** ptr;//вспомогательный указатель
    srand(time(NULL)*1000);
    while (n > 0) {
        ptr = Node;
        while (*ptr != NULL) {
            if ((double) rand()/RAND_MAX < 0.5) 
                ptr = &((*ptr)->Left);
            else ptr = &((*ptr)->Right);
        }
        (*ptr) = new BinaryTree();
        cout << "Введите значение: ";
        cin >> (*ptr)->Data;
        n--;
    }
}
 
 
//печать бинарного дерева
void Print_BinaryTree(BinaryTree* Node, int l)
{
    int i;
    if (Node != NULL) {
        Print_BinaryTree(Node->Right, l+1);
        for (i=0; i< l; i++) cout << "    ";
        printf ("%4ld", Node->Data);
        Print_BinaryTree(Node->Left, l+1);
    }
    else cout << endl;
}
 
 
 
//вставка вершины в бинарное дерево
void Insert_Node_BinaryTree(BinaryTree** Node,int Data) 
{
    BinaryTree* New_Node = new BinaryTree;
    New_Node->Data = Data;
    New_Node->Left = NULL;
    New_Node->Right = NULL;
    BinaryTree** ptr = Node;//вспомогательный указатель
    srand(time(NULL)*1000);
    while (*ptr != NULL) {
        double q = (double) rand()/RAND_MAX;
        if ( q < 1/3.0) ptr = &((*ptr)->Left);
        else if ( q > 2/3.0) ptr = &((*ptr)->Right);
        else break;
    }
    if (*ptr != NULL) {
        if ( (double) rand()/RAND_MAX < 0.5 ) 
            New_Node->Left = *ptr;
        else New_Node->Right = *ptr;
        *ptr = New_Node;
    }
    else{
        *ptr = New_Node;
    }
}
 
//удаление вершины из бинарного дерева
void Delete_Node_BinaryTree(BinaryTree** Node,int Data)
{
    if ( (*Node) != NULL ){
        if ((*Node)->Data == Data){
            BinaryTree* ptr = (*Node);
            if ( (*Node)->Left == NULL && (*Node)->Right == NULL ) (*Node) = NULL;
            else if ((*Node)->Left == NULL) (*Node) = ptr->Right;
            else if ((*Node)->Right == NULL) (*Node) = ptr->Left;
            else {
                (*Node) = ptr->Right;
                BinaryTree ** ptr1;
                ptr1 = Node;
                while (*ptr1 != NULL) 
                    ptr1 = &((*ptr1)->Left);
                (*ptr1) = ptr->Left;
            }
            delete(ptr);
            Delete_Node_BinaryTree(Node,Data);
        }
        else {
            Delete_Node_BinaryTree(&((*Node)->Left),Data);
            Delete_Node_BinaryTree(&((*Node)->Right),Data);
        }
    }
}
 
//проверка пустоты бинарного дерева
bool Empty_BinaryTree(BinaryTree* Node)
{
    return ( Node == NULL ? true : false );
}
 
//освобождение памяти, выделенной под бинарное дерево
void Delete_BinaryTree(BinaryTree* Node)
{
    if (Node != NULL) {
        Delete_BinaryTree(Node->Left);
        Delete_BinaryTree(Node->Right);
        delete(Node);
    }
}
 
int main()
{
    setlocale(LC_ALL, "RUS");
    cout << "Введите размер дерева: ";
    int TreeLen; cin >> TreeLen;
    Make_Binary_Tree(&BTree, TreeLen);
    cout << "\n~~~~~~~~~~~\nДерево:\n";
    Print_BinaryTree(BTree, TreeLen);
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2015, 16:35
Ответы с готовыми решениями:

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

Дано дерево. Распечатать дерево по уровням
Дано дерево. Распечатать дерево по уровням.

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при...

Напишите программу, которая бы читала дерево в формате (а) и затем печатала бы это дерево в формате (б).
Представление дерева: а) Д (Б (А, Ф (В,)), Е (,З (Ж, И))) б) Д Б ...

0
22.11.2015, 16:35
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2015, 16:35
Помогаю со студенческими работами здесь

Дерево дерево, странное дерево
Нужна помощь в построении дерева. Задание таково: Вершина дерева содержит N целых значений и два...

Дерево, бинарное дерево
Читаю про дерево и не до конца понимаю, а точнее понимаю, но вопрос в том, правильно ли я понимаю,...

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

Дерево...
в общем есть дерево двоичного поиска, состоит из функций добавления, удаления, поиска, вывода,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru