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

Дерево

22.11.2015, 16:35. Показов 495. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2015, 16:35
Ответы с готовыми решениями:

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

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

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

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

0
22.11.2015, 16:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2015, 16:35
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru