С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sibrea
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 3
#1

C++, бинарное дерево. Как доработать программу? - C++

21.03.2013, 14:36. Просмотров 663. Ответов 3
Метки нет (Все метки)

Программа не работает.
Смысл ее такой: из входного файла считать числа в линейный список, отсортировать (я сразу сортировала при считывании), создать из этих чисел бинарное дерево поиска.
Да, тут дерево описывается немного по-другому, но нас так учат.
И еще: как я узнаю, что программа справилась со своей задачей?
Мне бы какой нибудь способ (и попроще желательно) вывода этого дерева.
Помогите пожалуйста.
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
#include <iostream>
#include <fstream>
using namespace std;
 
struct tTElem
{
    int info;
    tTElem *l,*r;
};
 
struct tElem
{
    int info;
    tElem *next;
};
 
tElem *head = new tElem;
 
tTElem *root = new tTElem;
 
int znach (int middle)
{
    tElem *temp=head;
    for (int i=0; i<middle; i++)
    temp=temp->next;
    return temp->info;
}
 
void create_tree (tTElem * & new_root, int start, int end)
{
    if (start<=end)
    {
        int middle=(end-start)/2 + start;
        new_root= new tTElem;
        new_root->info = znach(middle);
        create_tree(new_root->l, start, middle-1);
        create_tree(new_root->r, middle+1, end);
    }
    else new_root=NULL;
}
 
int zapol (char filename[])
{
    ifstream in(filename);
    tElem *nElem, *temp1, *temp2;
 
    int v,i; i=0;
    in>>head->info;
    while (!in.eof())
    {
        in>>v; i++;
        bool flag=true;
        if (v<=head->info)
        {
            nElem = new tElem;
            nElem->info=v;
            nElem->next=head;
            head=nElem;
            flag=false;
        }
        else
        {
            temp1=head;
            while (temp1->next!=NULL)
 
            {
                temp2=temp1;
                temp1=temp1->next;
 
                if (v<=temp1->info)
                {
                    nElem = new tElem;
                    nElem->info=v;
                    nElem->next=temp1;
                    temp2->next=nElem;
                    flag=false;
                }
            }
        }
        if (flag)
        {
            nElem=new tElem;
            nElem->info=v;
            temp1->next=nElem;
        }
    }
    in.close();
    return i;
}
 
 
 
int main()
{
 
    char buf[20];
    cout<<"enter filename";
    cin>>buf;
    int kol=zapol(buf);
    create_tree(root, 0, kol);
    
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2013, 14:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос C++, бинарное дерево. Как доработать программу? (C++):

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

Написать программу, создающую бинарное дерево и функцию проверки его на строгость - C++
Написать программу, создающую бинарное дерево и функцию проверки его на строгость. Строгое бинарное дерево – это дерево, у которого...

Написать программу обработки базы данных телефонных абонентов, используя бинарное дерево - C++
Оператор мобильной связи организовал базу данных абонентов, содержащую сведения о телефонах, их владельцах и используемых тарифах, в виде...

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

Бинарное дерево с повторяющимися узлами - как их найти? - C++
Всем добрый вечер. Сейчас сижу и сам пытаюсь понять тему связанную с деревьями, но возникла тупиковая ситуация, может даже какое то...

Cоставить бинарное дерево поиска как по азбуке Морзе - C++
Всем привет, тут есть люди которые хорошо разбираются с бинарными деревьями?:))) Добавлено через 18 минут ммммм?:(

3
Leshak
259 / 235 / 40
Регистрация: 10.12.2011
Сообщений: 513
21.03.2013, 14:49 #2
Попробуйте добавить в теле программы system("pause")( основной блок с пометкой main, её же ещё точкой входы называют ). Ну вернее я уже за вас добавил. И посмотрите результат.

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
 
    char buf[20];
    cout<<"enter filename";
    cin>>buf;
    int kol=zapol(buf);
    create_tree(root, 0, kol);
    
    system("pause");
    return 0;
}
0
Sibrea
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 3
21.03.2013, 15:10  [ТС] #3
Цитата Сообщение от Leshak Посмотреть сообщение
Попробуйте добавить в теле программы system("pause")( основной блок с пометкой main, её же ещё точкой входы называют ). Ну вернее я уже за вас добавил. И посмотрите результат.

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
 
    char buf[20];
    cout<<"enter filename";
    cin>>buf;
    int kol=zapol(buf);
    create_tree(root, 0, kol);
    
    system("pause");
    return 0;
}

Все так же. По сути, программа запускается. Набираю имя файла. Enter. И виснет программа: окошко так и остается открытым. Закрываю, CodeBlocks пишет Process terminated with status -1073741510 (0 minutes, 6 seconds)
0
ya_noob
_
203 / 147 / 9
Регистрация: 08.10.2011
Сообщений: 432
21.03.2013, 15:21 #4
печать дерева (сверху печатается левое поддерево, затем корень и внизу правое):
C++
1
2
3
4
5
6
7
8
9
#include <iomanip>
 
void printTree( tTElem * root, int h = 5 )
{
    if ( root == 0 ) return;
    printTree( root->left, h + 5 );
    cout << setw( h ) << root->info << endl;
    printTree( root->right, h + 5 );
}
0
21.03.2013, 15:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 15:21
Привет! Вот еще темы с ответами:

Как заполнить бинарное дерево, чтобы оно не превратилось в обычный стек - C++
вот допустим написал заполнение данных в виде бинарного дерева, и в слуае если данные записываются по возрастанию , 1,2,3,4,5.... и тд, то...

Бинарное дерево - C++
Привет Делаю бинарное дерево, пытаюсь добавить элемент. Что делаю не так? Класс дерева struct node{ int data; //поле...

Бинарное дерево - C++
Подскажите алгоритм распечатки дерева на экран горизонтально, не вертикально, как обычно это делают. struct tree { int k;...

Бинарное дерево - C++
Здравствуйте, нужно помощь в написании программы. Условие: Каждая вершина бинарного дерева содержит: - 2 указателя (на каждый...


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

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

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