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

Построение бинарного дерева - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Выход за диапозон... http://www.cyberforum.ru/cpp-beginners/thread77346.html
В #include <iostream> #include <algorithm> #include <numeric> #include <time.h> using namespace std; ////////////////////////////////////////////////////// void out(int *a,int n,int k); void vin(int *a,int n); void prod(int *a,int n,int k); //////////////////////////////////////////////////////
C++ Двумерный массив!!!! Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины. Спасибо ! http://www.cyberforum.ru/cpp-beginners/thread77345.html
C++ инверсии
Пусть дана последовательность из 20 целых чисел.Определить количество инверсий в этой последовательности.(то есть таких пар элементов в которых большее число число находится слева от меньшего xi>xj при i<j ) Помогите решить плз
Итоговая: массивы с модулем C++
В массиве, состоящем из n вещественных чисел, необходимо вычислить: - номер минимального по модулю элемента массива; - сумму модулей элементов массива, расположенных после первого отрицательного элемента. буду очень признателен.
C++ Вычисление (правильно ли?) http://www.cyberforum.ru/cpp-beginners/thread77322.html
6 Даны действительное число а и натуральное число n. Вычислить #include <cmath> #include <iostream> using namespace std; void main( void )
C++ В чем моя ошибка ? задача ввести в Мэмо числа , поместить в массив и найти минимальное из них , выводя его в Эдит ... в чем я ошибся ?? подскажите пожалуйста ! { int i; //индекс int a;// массив из 10ти элементов int min; //вводим параметр мин for(i=1;i<10;i++) //для 1 го увеличиваем на 1 до 10ти подробнее

Показать сообщение отдельно
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
21.12.2009, 07:46     Построение бинарного дерева
да. путаницы не будет если сделать правельный обход дерева
что то вроде этого:

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
struct node{
       string word1;//английское слово - ключ для поиска.
       string word2;//русское слово.
       node* left;//левый сын.
       node* right;//правый сын.
       node (string S1,string S2)//ГЄГ®Г*ñòðóêòîð
       {
            word1=S1;
            word2=S2;
            left=0;
            right=0;
       }
       void add(string S1,string S2)//äîáГ*âëåГ*ГЁГҐ ýëåìåГ*ГІГ*
       {
            int i=0;
            while (S1[i]==word1[i])i++;//ГІГіГІ ГЁГ№ГЁГ¬ ïåðâóþ Г*ГҐ ñîâïГ*Г¤Г*ГѕГ№ГіГѕ ГЎГіГЄГўГі äâóõ ñëîâ.
            //åñëè Гі ГІГҐГЄГіГ№ГҐГЈГ® óçëГ* ГҐГ±ГІГј ГўГҐГІГўГЁ. ГІГ® Г*Г*äî äîáГ*ГўГЁГІГј Гў ГЅГІГЁ ГўГҐГІГўГЁ.
            if ((S1[i]>word1[i])&&left) left->add(S1,S2);
            if ((S1[i]<word1[i])&&right) right->add(S1,S2);
 
            //åñëè Гі ГІГҐГЄГіГ№ГҐГЈГ® óçëГ* Г*ГҐГІГі ГўГҐГІГўГҐГ© Г*Г*äî áîáГ*ГўГЁГІГј ГЄ ГҐГЈГ® left èëè right.
            if ((S1[i]>word1[i])&& !left) {new p=node(S1,S2); left=&p;}
            if ((S1[i]<word1[i])&& !right){new p=node(S1,S2); right=&p;}
        }
        void print(int n)//âûâîä Г*Г* ГЅГЄГ°Г*Г*
        {
             if (left)left->print(n+1);
             for (int i=0;i<n;i++)cout << "    " ;cout <<word1 <<"="<<word2<<endl;
             if (right)light->print(n+1);
        }
        string search(string s) //ïîèñê ñëîâГ* ГЇГ® êëþ÷ó
        {
               if (s==word1)return word2; //êëþ÷ ñîâïГ*Г«.
               int i=0;
               while (S1[i]==word1[i])i++;//ГІГіГІ ГЁГ№ГЁГ¬ ïåðâóþ Г*ГҐ ñîâïГ*Г¤Г*ГѕГ№ГіГѕ ГЎГіГЄГўГі äâóõ ñëîâ.
               //Г±ГЇГіГ±ГЄГ*åìÿ âëåâî èëè ГўГЇГ°Г*ГўГ®.
               if ((S1[i]>word1[i])&&left) return left->search(s);
               if ((S1[i]<word1[i])&&right) return right->search(s);
        }
};
 
struct tree{
       node *link;
       tree(){link=0;}
       void add(string S1,string S2)
       {
            if (link) link->add(S1,S2);
            else {new p=node(S1,S2);link=&p;}
       }
       void print(){if (link)link->print(1);else cout << "Tree is empty\n";}
       string search(string s){if (link) return link->search(s);else cout << "Tree is empty\n";return "error";}
};
 
int main()
{
    tree T;//создали пустое дерево.
    T.add("Hello","Privet");
    T.add("Goodby","Poka");
    T.add("Dog","Sobaka");
    T.add("Pain","C++");
    T.add("Car","Avtomobil");
    T.print();//вывели содержимое дерева на экран
    
    string s=T.search("Dog");//совершили поиск по ключу
    cout << s<<endl;
}
на экран выведется:
Sobaka

не забудь добавить функции удаляющие дерево, и еще какие нибудь, что бы покошернее было (напимер заполнение дерева из файла).
 
Текущее время: 13:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru