Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 02.12.2016
Сообщений: 1
1

Бинарное дерево поиска: "Библиотека", поиск по автору книги

02.12.2016, 18:19. Показов 753. Ответов 1
Метки нет (Все метки)

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


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
#include <iostream>
#include <cstring>
#include <cstdlib>
#define SURNAME 30
#define BOOK_TITLE 50
 
using namespace std;
 
struct Lib{
    int cipher;
    char surname[SURNAME];
    char book_title[BOOK_TITLE];
};
 
struct Node{
    Lib data;
    Node* left;
    Node* right;
};
Lib* createNew();
Lib* libInput(Lib* lib);
Node* createNode(Node* root,Node* r,Lib* lib);
void printTree(Node* root);
void printFoundNode(Node* root);
Node* searchNode(Node* root,char sur[]);
 
 
int main()
{
    int count = 0;
    char surname[SURNAME] = {0};
    Node* root = NULL;
    cout<<"Enter count of book's : ";cin>>count;
    int i(1);
    do
    {
        cout<<"Enter data for "<<i<<" book : ";
        root = createNode(root,root,libInput(createNew()));
        i++;
    } while(i<=count);
    system("cls");
    printTree(root);
    cout<<"Enter author : ";cin.getline(surname,SURNAME);
    root = searchNode(root,surname);
    printFoundNode(root);
 
return 0;
}
 
 
Lib* createNew()
{
    Lib* item = new Lib;
    return item;
}
 
Lib* libInput(Lib* lib)
{
    cout<<endl<<"Enter book's cipher : ";cin>>lib->cipher;
    cout<<"Enter book's author's surname: ";cin.get();cin.getline(lib->surname,SURNAME);
    cout<<"Enter book's title: ";cin.getline(lib->book_title,BOOK_TITLE);
    return lib;
}
 
Node* createNode(Node* root,Node* r,Lib* lib)
{
    if(!r)
    {
    r = new Node;
    r->left = NULL;
    r->right = NULL;
    r->data.cipher = lib->cipher;
    strcpy(r->data.surname,lib->surname);
    strcpy(r->data.book_title,lib->book_title);
    if(!root) return r;
    if(lib->cipher < root->data.cipher)
        root->left = r;
    else root->right = r;
    return r;
    }
    else if(r->data.cipher > lib->cipher)
        createNode(r,r->left,lib);
    else createNode(r,r->right,lib);
    return root;
}
 
 
void printTree(Node* root)
{
    if(!root) return;
 
    printTree(root->left);
    cout<<"Book's cipher : "<<root->data.cipher<<endl;
    cout<<"Book's author's surname : "<<root->data.surname<<endl;
    cout<<"Book's title : "<<root->data.book_title<<endl<<endl<<endl;
    printTree(root->right);
}
 
void printFoundNode(Node* root)
{   if(!root)
    return;
 
    cout<<"Book's cipher : "<<root->data.cipher<<endl;
    cout<<"Book's title : "<<root->data.book_title<<endl<<endl<<endl;
}
 
Node* searchNode(Node* root,char sur[])
{
    int tmp = 0;
    if(!root)
    {
    return NULL;
    }
    if((tmp = strcmp(root->data.surname,sur))==0)
    {
        return root;
    }
    searchNode(root->left,sur);
    searchNode(root->right,sur);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2016, 18:19
Ответы с готовыми решениями:

Бинарное дерево поиска. Сумма "листьев"
Доброго времени суток. Суть задачи состоит в том, чтобы посчитать сумму элементов, находящих на...

Классы "Бинарное дерево" и "Узел" в одном приложении
Компилятор разбушевался((( Пробовала сделать вместо одного класса два класса(Дерево и узел)....

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

Бинарное дерево поиска - улучшение "визуализации" дерева
Здравствуйте, есть программа, формирующая выводящая на экран бинарное дерево поиска, значения...

1
52 / 52 / 37
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
05.12.2016, 13:40 2
Потому, что после нахождения первой ноды, которая тебе подходит, ты прекращаешь поиск.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2016, 13:40

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

Бинарное дерево (связный список "сыновей")
Здравствуйте, помогите, пожалуйста, с программой.Нужно реализовать бинарное дерево, представленное...

Шаблон класса "Бинарное дерево" с насследованием
Здравствуйте! Есть задание сделать шаблон класса &quot;Бинарное дерево&quot;. #include &lt;iostream&gt;...

Шаблон класса "упорядоченное бинарное дерево"
Задание:Шаблон класса &quot;упорядоченное бинарное дерево&quot; ПОЧЕМУ НЕ РОБОТАЕТ? #include &quot;pch.h&quot;...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько...

Построить идеально сбалансированное бинарное дерево поиска и обеспечить поиск указанных записей
Вообщем написал программу и не уверен, что правильно работает балансировка( При нечетном...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.