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

Поиск по бинарному дереву целочисленных значений - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ поиск по имени в базе данных через хэш - таблицы http://www.cyberforum.ru/cpp-beginners/thread720540.html
#include <iostream> #include <cstring> using namespace std; struct Player { char *name; int age; int soccer_number;
C++ Даны натуральное число n, действительные числа a[1],.,a[n]. Вычислить по правилу Объясните чего от меня хотят? Даны натуральное число n, действительные числа a,...,a. Вы- числить -a,a,-a,...,(-1)^na. -1 в степени na? _что? http://www.cyberforum.ru/cpp-beginners/thread720537.html
Unsigned long (Найти шестнадцатеричное представление числа) C++
Нужно написать код програмы на С++ Помогите пожалуйста, очень сильно нужно(((( Задано число диапазона unsigned long. Найти его шестнадцатеричное представление.
Программа «Факультет» C++
Вот такое задание. Свойства: ФИО студентов, предметы, оценки, название групп. Предусмотреть вывод рейтингов студентов предмету по группам по факультету. Поиск студента по фамилии с выводом информации о нём: группа, оценки по предметам. Есть у кого то идеи как это реализовать? :/
C++ Удаление элементов классе Vector http://www.cyberforum.ru/cpp-beginners/thread720508.html
Из числовой последовательности найти удалить все элементы, лежащие в промежутке , где X – среднее арифметическое элементов последовательности, A и B – задаваемые пользователем коэффициенты. Собственно не работает удаление i элемента(Функция Delete). Как правильно сделать? #include <cassert> #include <stdio.h> #include <conio.h> #include <iostream> using namespace std;
C++ поиск чисел, которые при сложении с собой же, но записанном в обратном порядке, дают число, состоящее из нечетных цифр Доброго времени суток) Задача:поиск чисел в заданном диапазоне, которые при сложении с собой же, но записанном в обратном порядке, дают число, состоящее из нечетных цифр. Числа с концевыми нулями игнорируются. Диапазон (0;332) подробнее

Показать сообщение отдельно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
05.12.2012, 18:52     Поиск по бинарному дереву целочисленных значений
smeaz, под свои нужды подстроишь. Сразу говорю, что там память вроде как не освобождается.
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
129
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
 
struct  bin_tree
{
   int value;
   bin_tree *left, *right;
}*pHead = NULL; // указатель на вершину равен нулю
 
// добавление конкретного узла дерева
void add_node(bin_tree*, int); 
// проверка на "пустоту" дерева, если указатель на вершину равен нулю, создает узел
void add_bin_tree(int);
// обход
void print(bin_tree*);
void traversal(bin_tree*, ofstream&);
int h_tree(bin_tree *);
 
int main()
{
    setlocale (LC_ALL, "Russian");
    int choose, el;
    cout<< "1. Загрузить последовательность с файла\n"
        << "2. Ввести последовательность вручную\n\n"
        << "Ваш выбор: ";
    do{ cin>> choose;} while(choose != 1 && choose != 2);
    if (choose == 1)
    {        
        ifstream iz("bin.txt");
        if (iz.bad()) return 1;
        while(!iz.eof() && iz>> el)
            add_bin_tree (el);     
        iz.close();
    }
    
    if (choose == 2)
    {
        cout<< "Информационные поля вершин дерева:\n";
        while(cin>> el)
            add_bin_tree (el);
    }
    ofstream o("bin.txt");
    print (pHead);
    traversal (pHead, o);
    getch();
    o.close();
    return 0;
}
 
void add_node(bin_tree* tree, int value) // добавление конкретного узла дерева
{
    if(value < tree->value)
    { 
        if(tree->left != NULL) // если значение меньше, двигаемся по "левой ветке"
            add_node(tree->left, value);
        else
        {  
            tree->left = new bin_tree;
            tree->left->value = value;
            tree->left->left = NULL;
            tree->left->right = NULL;
        }
    }
 
    if(value > tree->value) // иначе двигаемся по правой 
    { 
        if(tree->right != NULL)
            add_node(tree->right, value);
        else
        {
            tree->right = new bin_tree;
            tree->right->value = value;
            tree->right->left=NULL;
            tree->right->right=NULL;
        }
    }
 
    if(value == tree->value)                
        cout<< value<< " is already in tree"<< endl;
}
 
void add_bin_tree(int value)
{
    if(pHead == NULL) // если дерево пустое - создадим первый узел
    {
       pHead = new bin_tree;
       pHead->value = value;
       pHead->left = NULL;
       pHead->right = NULL;
    }
    else
        add_node(pHead, value); // если в вершине уже что-то есть - добавляем слева или справа 
}
 
void traversal(bin_tree* tree, ofstream &o)
{     
    if (tree != NULL)
    { 
        traversal(tree->left, o);
        o<< tree->value<< " ";
        traversal(tree->right, o);
    }
}
 
void print(bin_tree* tree)
{     
    if (tree != NULL)
    { 
        print(tree->left);
        cout<< tree->value<< " ";
        print(tree->right);
    }
}
 
int h_tree(bin_tree* tree)
{
     int h = 1, m = 0, s;
     if (tree == NULL)
        return 0;
     s = h_tree(tree->left);
     if (s > m)
         m = s;
     s = h_tree(tree->right);
     if (s > m)
         m = s;
     return h + m;
}
Чтобы понять бинарное дерево -
ручка и листок бумаги
 
Текущее время: 01:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru