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

Дерево

22.11.2015, 16:35. Показов 516. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2015, 16:35
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер