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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибки LNK2001 http://www.cyberforum.ru/cpp-beginners/thread794523.html
Здравствуйте! Подскажите, как исправить ошибки: Error 7 error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtBeginner::staticMetaObject" (?staticMetaObject@QwtBeginner@@2UQMetaObject@@B) graphicsdialog.obj Error 3 error LNK2001: unresolved external symbol "public: virtual int __thiscall GraphicsView::qt_metacall(enum QMetaObject::Call,int,void * *)"...
C++ Расчет количества уровней в бинарном дерева Доброго всем времени суток, есть бинарное дерево с функциями добавления, удаления и печати, нужно еще создать функцию Depth которая будет подсчитывать кол-во уровней в дереве... Не могу додуматься до алгоритма, помогите кто может:) Заранее спасибо:) http://www.cyberforum.ru/cpp-beginners/thread794516.html
C++ Одномерные массивы. Вычислить 30 значений функции
Вычислить 30 значений функции y=ax^2+bx+c на отрезке , сохранить их в массиве У. Вычислить количество отрицательных и положительных компонент массива.
Пояснение ошибки, напечатать таблицу степеней C++
Здравствуйте. В книги Липпмана Cplusplus дана задача в качестве примера: напечатать таблицу степеней двойки от 0 до 15 include <iostream> extern int pow(int,int); int main() { int val = 2; int exp = 15; cout << "Степени 2\n";
C++ Статический и динамический экземпляры класса http://www.cyberforum.ru/cpp-beginners/thread794448.html
В чем разница между статическим и динамическим экземплярами класса? Мои познания здесь скромны: 1) Разная инициализация. У меня есть класс Test. Статический экземпляр создается так:Test stat;При этом получаем экземпляр класса, который будет находиться в стеке, и для которого, по достижению конца блока кода, будет автоматически вызван деструктор. Динамический класс создается так:Test dynam =...
C++ Лафоре,задача про денежный тип Вот задачка: Одним из недостатков C++ является отсутствие для бизнес-программ встроенного типа для денежных значений, такого, как $173 698 001,32. Такой денежный тип должен иметь возможность для хранения числа с фиксированной десятичной точкой точностью около 17 знаков, которого было бы достаточно для хранения национального долга в долларах и цен- тах. К счастью, встроенный тип C++ long double... подробнее

Показать сообщение отдельно
Grif1992
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 50
25.02.2013, 16:08     Бинарное дерево
Дан адрес P1 вершины дерева — записи типа TNode, содержащей поля Data (целого типа), Left, Right и Parent (типа PNode — указателя на TNode). Поля Left и Right указывают на дочерние вершины, а поле Parent — на родительскую вершину данной вершины (если вершина является корнем дерева, то ее поле Parent равно nil). Для данной вершины вывести указатели PL, PR и P0 на ее левую и правую дочерние вершины и родительскую вершину, а также указатель P2 на ее сестру, т. е. другую вершину дерева, имеющую в качестве родительской вершину с адресом P0. Если некоторые из перечисленных вершин не существуют, то вывести для них значение nil.
Подскажите пожалуйста, почему программа не читает данные из файла
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
#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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru