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

Бинарное дерево

29.12.2012, 09:27. Показов 1296. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните пжлст почему не работает программа...при вводе файла пишет -842150451
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
/*Дан адрес P1 вершины дерева — записи типа TNode, 
содержащей поля Data (целого типа), Left, Right и Parent (типа PNode — указателя на TNode). Поля Left и 
Right указывают на дочерние вершины, а поле Parent — на родительскую вершину данной вершины 
(если вершина является корнем дерева, то ее поле Parent равно nil). Для данной вершины вывести 
указатели PL, PR и P0 на ее левую и правую дочерние вершины и родительскую вершину, а также указатель 
P2 на ее сестру, т. е. другую вершину дерева, имеющую в качестве родительской вершину с адресом P0. Если некоторые 
из перечисленных вершин не существуют, то вывести для них значение nil*/
#include <iostream>
#include <fstream>
#include <conio.h>
using namespace std;
//структура эл-та дерева
struct Node
{
    int info;           //значение
    Node *left;         //левая дочерняя вершина
    Node *right;        //правая дочерняя вершина
    Node *parent;       //родительская вершина
};
//ф-ция построения дерева (алг. лабы 32)
//параметры: ссылка на файл, кол-во вершин, указатель на родительскую в-ну, ссылка на указатель на текущий эл-т
void BuildTree(ifstream &f, int N, Node* Parent, Node* &Current)
{
    Current = new Node;         //создаем тек. вер-ну
    f >> Current->info;         //читаем очередное значение из файла
    Current->left = NULL;       //указатель на левую в-ну = NULL
    Current->right = NULL;      //на правую = NULL
    Current->parent = Parent;   //на родительскую соответствует переданному в параметрах
    //если нужно добавлять левую в-ну
    if (N>1)
        //добавляем в соответствии с алгоритмом, текущая в-на является для добавляемой родительской
        BuildTree(f, N/2, Current, Current->left);
    //аналогично для правой
    if (N>2)
        BuildTree(f, N-1-N/2, Current, Current->right);
}
//вывод указателей на эл-ты дерева
//параметр: указатель на тек в-ну
void PrintNodePointers(Node* Current)
{
    //вывести указатель на тек. в-ну
    cout << Current << endl;
    //если есть левая, то вывести на нее указатель
    if (Current->left != NULL)
        PrintNodePointers(Current->left);
    //аналогично для правой
    if (Current->right != NULL)
        PrintNodePointers(Current->right);
}
 
//выводим информацию о вершине
void PrintVertexData(Node* Vertex)
{
    cout << "Left: ";
    //если существует левая в-на, то выводим на нее указатель, иначе пишнм "nil"
    (Vertex->left != NULL) ? cout << Vertex->left : cout << "nil";
    cout << endl;
 
    cout << "Right: ";
    //аналогично для правой
    (Vertex->right != NULL) ? cout << Vertex->right : cout << "nil";
    cout << endl;
 
    cout << "Parent: ";
    //аналогично для родительской
    (Vertex->parent != NULL) ? cout << Vertex->parent : cout << "nil";
    cout << endl;
 
    cout << "Sister: ";
    //если существут родительская в-на, то возможно существует "сестра"
    if (Vertex->parent != NULL)
    {
        //если текущая в-на является левой по отношению к родительской, то ее "сестра" - правая
        if (Vertex->parent->left == Vertex)
            //если правая "сестра" существует, то вывести на нее указатель, иначе "nil"
            (Vertex->parent->right != NULL) ? cout << Vertex->parent->right : cout << "nil";
        else
            //иначе "сестра" - левая, если существует, то вывести на нее указатель
            (Vertex->parent->left != NULL) ? cout << Vertex->parent->left : cout << "nil";
    }
    else
        cout << "nil";
    cout << endl;
}
 
//ф-ция печати дерева
//параметры: вершина, уровень в-ны в дереве
void print_Tree(Node * p,int level)
{   //если указатель на текущую в-ну не NULL
    if(p)
    {   //напечатать левую дочернюю в-ну
        print_Tree(p->left,level + 1);
        //сместить курсор до позиции соответствуещей уровню в-ны
        for(int i = 0;i< level;i++) cout<<"    ";
        //вывести значение в-ны
        cout << p->info << endl;
        //напечатать правую в-ну
        print_Tree(p->right,level + 1);
    }
}
 
int main()
{
    Node *first=NULL;               //указатель на корневой эл-т
    cout << "Enter file name\n";
    char fname[100];                //имя файла
    cin.getline(fname, 100);        //читаем имя файла
    ifstream f;                     
    f.open(fname, ios::in);         //открыть файл для чтения
    int N;
    f >> N;                         //читаем число в-н дерева
 
    BuildTree(f, N, NULL, first);   //строим дерево, родительская в-на корневого эл-та не существует
    
    print_Tree(first, 0);           //печать дерева
    
    PrintNodePointers(first);       //выводим все указатели на эл-ты дерева
    cout << "Enter vertex pointer from list\n";
    //читаем указатель на эл-т дерева как целое число в HEX формате
    cin >> hex >> N;
    //выводим информацию в-ны. в параметрах приводим тип int к Node* (целое число - это адрес в памяти)
    PrintVertexData((Node*)N);
    //ждать нажатия кнопки завершения
    _getch();
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.12.2012, 09:27
Ответы с готовыми решениями:

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

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

Бинарное дерево
Помогите пожалуйста с программой. Нужно сделать обход, слева и справа(функции get_left и get_right), желательно обход в глубину. И...

1
113 / 113 / 28
Регистрация: 05.07.2009
Сообщений: 225
29.12.2012, 12:21
Grif1992, если вы запускаете программу из среды разработки, то, скорее всего, вы просто не туда положили файл. Например, для Microsoft Visual C++ 2010 файл нужно класть в /projects/<имя_проекта>/<имя_проекта>, а для Code Blocks 10.5 - просто в /<имя_проекта>. Попробуйте методом математического тыка найти нужное место для вашей среды разработки, или используйте абсолютные пути.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.12.2012, 12:21
Помогаю со студенческими работами здесь

Бинарное дерево
Здравствуйте дорогие форумчане. Помогите, пожалуйста, реализовать бинарное дерево поиска, а так же операции по добавлению элемента в...

Бинарное дерево
Разработать и реализовать на языке С следующие функции работой с бинарным деревом: 1. Создание пустого дерева 2. Добавление элемента в...

бинарное дерево
С помощю бинарного дерева нужна сделать программу,,любую (главное что на экран выводило)

Бинарное дерево
Друзья, помогите реализовать задачу в виде бинарного дерева: Оператор мобильной связи организовал базу данных абонентов,...

Бинарное дерево
Написать программу для создания, на основе конструктора,дерева из объектов двух типов. Объекты первого типа ссылаются на два объекта....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru