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

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

Войти
Регистрация
Восстановить пароль
 
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
#1

рекурсия - C++

11.07.2011, 17:02. Просмотров 669. Ответов 9
Метки нет (Все метки)

Помогите,пожалуйста, изменить рекурсивную ф-цию.сразу прошу не пугаться размера программы, весь код привожу для возможности отладки, проблема у меня в функции FindEmptyPointer. из-за нее дерево строится в виде, изображенном на рисунках (на клеточке - нижний рисунок и первый рисунок отображают как есть) а необходимо, как на верхнем, тоесть добавлять узлы в один список, пока тот не закончится, затем переходим к другому списку, а выходит так, что в каждый узел кидаем по одному узлу. оч. надеюсь на вашу помощь.


о программе: в каждом узле - разное колличество ссылок на наследующие узлы(см. рис. 2)
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
130
131
132
133
134
135
136
137
138
139
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#include <string.h>
#include <iostream>
using namespace  std;
 
struct Node;
struct List{
    List* next;//след. ссылка
    Node* node;//ссылка
    };
struct Node{
    char s; //cимвол
    List* list;//ссылка на список
    };
 
List* MakeSomeList();
Node* Add(char s, Node* root, int &f);
List* FindEmptyPointer(Node* root, List* &Empty);//поиск "пустого" указателя
void Search(Node* root,char s,int &i);//поиск символа в дереве
void DelSomeNode(Node* root,char s);//удаление найденого символа из дерева
 
void Search(Node* root,char s, int &i)
{
if(root)
{
    if(root->s==s)
        i++;    
if(root->list)
{
    if(root->list->node!=NULL)
        return Search(root->list->node,s,i);
}   
    while(root->list->next!=NULL)
        return Search(root->list->next->node,s,i);
}
}
 
void DelSomeNode(Node* root,char s)
{
}
 
void PrintTree(Node* root)
{
if(root)
    {
    cout<<root->s<<" "; 
    if(root->list)
        {
        if(root->list->node!=NULL)
            return PrintTree(root->list->node);
        }   
        while(root->list->next!=NULL)
            return PrintTree(root->list->next->node);
    }
}
 
List* MakeSomeList()
{
    List* p=new List;
    List* ptr=p;
    p->node=NULL;
    for(int i=rand()%2+2;i>0;i--)// создание ссылок наследования узла 2-4
        {
            p->next=new List;
            p->next->node=NULL;//инициализируем НУЛЕМ указатели на узлы
            p=p->next;
        }
    p->next=NULL;
    p->node=NULL;
return ptr;
}
 
Node* Add(char s, Node* root,List* Empty)
{
    if(root==NULL)//если пустое дерево
        {
            root=new Node;
            root->s=s;
            root->list=MakeSomeList();
            return root;
        }
        List* p=FindEmptyPointer(root,Empty);//находим НУЛЕВУЮ ссылку в дереве,
        Empty=NULL;
        p->node=new Node;// по ней создаем узел
        p->node->s=s;
        p->node->list=MakeSomeList();//и этому узлу приписываем список указателей
}
 
List* FindEmptyPointer(Node* root, List* &Empty)//поиск "пустого" указателя
{
    if(Empty!=NULL)
        return Empty;
    if(root)
    {
            if(root->list->node==NULL)
                {
                    Empty=root->list;
                    return Empty;
                }
            if(root->list->node!=NULL)
                return FindEmptyPointer(root->list->node,Empty);
            if(Empty!=NULL)
                return Empty;
            while(root->list->next!=NULL)
                return FindEmptyPointer(root->list->next->node,Empty);
    }
}
 
void main()
{
    char s, sw;//символы для управления меню
    int i=0;//для подсчета колличества символов
    Node* root=NULL;
    List* Empty=NULL;
    do  {
        system("CLS");
        cout<<"1.Add new symb\n2.Print Tree\n3.Delete finded\n4. Search\0.Exit";
        sw=getch();
            switch(sw)
            {
                case '1':cout<<"\n\nInput any symb>>";s=getch();cout<<"     "<<s;Sleep(400);
                        if(root==NULL)root=Add(s,root,Empty);
                        else Add(s,root,Empty);
                    break;
                case '2':cout<<endl; PrintTree(root);system("pause");break;
                case '3':DelSomeNode(root,s);break;
                case '4':cout<<"\nInput char for searching>>";cin>>s;i=0;
                        Search(root,s,i);
                        if(i!=0)    cout<<"There are "<<i<<" same symbols at tree now";
                        else        cout<<"There are no such symbol as '"<<s<<"'!";
                        Sleep(1000);
                    break;
            }
}while(sw!='0');
}
Миниатюры
рекурсия   рекурсия  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2011, 17:02     рекурсия
Посмотрите здесь:

Рекурсия - C++
Помогите написать функцию которая будет считать эту рекуррентную формулу с помощью рекурсии

рекурсия - C++
здравствуйте! я начал изучать с++... дошел до функций (а именно рекурсии)... я понял, что рекурсия-это функция, которая сама себя...

Рекурсия!!!! - C++
Доброго времени суток!!! В С++ полный нуб.... маюсь не первый день с такой задачкой: Напишите рекурсивную подпрограмму вычисления...

рекурсия - C++
Доброго времени суток. Уважаемые ГУРУ, есть одна проблема. Ниже представлен код, в котором параметр b должен быть всегда...

рекурсия - C++
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; void someFunction ( int , int, int ); int main () { ...

рекурсия - C++
Сделать рекурсию, кроме факториала!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
11.07.2011, 19:40  [ТС]     рекурсия #2
или вот еще, упростил слегка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
List* FindEmptyPointer(Node* root, List* &Empty)//поиск "пустого" указателя
{
    if(Empty!=NULL)
        return Empty;
    if(root->list->node==NULL)
        {
            Empty=root->list;
            return Empty;
        }
    if(root->list->node!=NULL)
        return FindEmptyPointer(root->list->node,Empty);
    if(Empty!=NULL)
        return Empty;
    while(root->list->next!=NULL)
        return FindEmptyPointer(root->list->next->node,Empty);
}
Добавлено через 2 часа 21 минуту
может условие непонятное? взялся ли кто за эту задачу?
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
11.07.2011, 20:57     рекурсия #3
в один список, пока тот не закончится, затем переходим к другому списку
а где тут указано ограничение на длину списка?

а вообще, уж слишком странный код - разобраться тут сложновато. посоветовал бы все внимательно переписать, протестировать каждую используемую ф-цию отдельно на голой структуре. и используй классы - все станет гораздо проще и внятнее.
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
11.07.2011, 22:59     рекурсия #4
Цитата Сообщение от vaselo Посмотреть сообщение


о программе: в каждом узле - разное колличество ссылок на наследующие узлы(см. рис. 2)
а почему нельзя сделать фиксированное количество ссылок? Это упорядочит дерево, упростит алгоритмы добавления и поиска до (право-лево). в таком виде структура напоминает снежинку. и центром надо делать точку с наибольшим количеством ссылок и от нее балансировать все. Как то слишком сложно. советую зафиксировать колво ссылок. Если есть необходимость в переменном колве то прошу расскзать какая. это интересно.
Paporotnik
11.07.2011, 23:22
  #5

Не по теме:

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

vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
11.07.2011, 23:44  [ТС]     рекурсия #6
дело в том, что мне и нужно произвольное колличество ссылок. в функции MakeSomeList видно, что у меня ограничения от 2 до 4 ссылок. код меня и препода вполне устраивает, вот только с этим алгоритмом обхода у меня проблема возникла, при тестировании, в отладке на вижуал студио видно, что структура дерева оч. растянута(рис.2, снизу) имеются доступные для добавления list->node и list->next у которого есть node и next
при проходе не затрагиваются все list->next, а пишет в list->node а хотелось, чтобы записало во все list->next->node, а потом переходило дальше.... не знаю, как обьяснить еще подробнее
FinKeRosiN
3 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 31
12.07.2011, 01:35     рекурсия #7
неужели нигде нету хоть какого нибудь элементарного примера на дерево общего вида?
мне уже снятся эти указатели
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
12.07.2011, 02:48     рекурсия #8
набросал простенький пример. дерево, хранящее целые числа. может что не очень удачно сделано, но уж как смог в 2 часа ночи)

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
#include <iostream>
using namespace  std;
 
class node;
typedef node* p_node;
 
struct record;
typedef record* p_rec;
 
class list;
typedef list* p_list;
 
struct record {
    p_node child_node;
    p_rec next;
};
 
class list {
    private:
        p_rec first;
        p_rec last;
        int num_of_recs;
    public:
        list() {
            first=0;
            last=0;
            num_of_recs=0;
        }
        
        p_rec add_rec() {
            if (!first) {
                first=new record;
                first->child_node=0;
                first->next=0;
                last=first;
                num_of_recs++;
            }
            else {
                p_rec temp;
                temp=new record;
                last->next=temp;
                last=temp;
                last->child_node=0;
                last->next=0;
                num_of_recs++;
            }
            return last;                
        }
        
        p_rec get_rec(int n) {
            p_rec temp=first;
            for (int i=0;i<n;i++) {
                temp=temp->next;
                if (!temp) return 0;
            }
            return temp;
        }
        
        int count() {return num_of_recs;}
};
 
class node {
    private:
        int value;
        p_list childs;
    public: 
        node(int v) {
            value=v;
            childs=0;
        }
        
        p_node add_child(int v) {
            if (!childs) childs= new list;
            p_node temp = new node(v);
            childs->add_rec()->child_node=temp;
            return temp;
        }
        
        p_node get_child(int n) {
            if (!childs) return 0; 
            p_node temp=this->childs->get_rec(0)->child_node;
            p_rec temp2;
            for (int i=1;i<n+1;i++) {
                temp2=this->childs->get_rec(i);
                if (!temp2) return 0;
                temp=temp2->child_node;
            }
            return temp;
        }    
        
        int get_value() {
            return value;
        }
};
 
void print_node (p_node n) {
    int k=n->get_value();
    cout<<"NODE with adr: "<<n<<" and VALUE: "<<k<<endl;
}
 
int main()
{
    p_node root, c1,c2,c3,c4,cc1,cc2,cc3,cc4;
    root=new node(123);
    print_node(root);
    
    cout<<"ADD CHILDS to NODE with adr: "<<root<<endl;
    
    c1=root->add_child(1234);
    c2=root->add_child(4321);
    c3=root->add_child(2341);
    c4=root->add_child(3412);
    print_node(c1);
    print_node(c2);
    print_node(c3);
    print_node(c4);
    
    cout<<"ADD CHILDS to NODE with adr: "<<c2<<endl;
    cc1=c2->add_child(777);
    cc2=c2->add_child(888);
    cc3=c2->add_child(999);
    print_node(cc1);
    print_node(cc2);
    print_node(cc3);
        
    system("pause");
}
FinKeRosiN
3 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 31
12.07.2011, 07:41     рекурсия #9
спасибо, буду разбираться
до утра еще пару часиков есть

Добавлено через 4 часа 39 минут
пришло вдохновение и вот что написал
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
// Описание дерева
struct Info
{
    int Key;
    
};
// Создание дерева
struct Node
{
    Info data;
    Node *son;
    Node *brother;
};
Node *top=NULL, *son=NULL;
Info *RetInfo = NULL, *DelInfo = NULL;
 
// Поиск элемента в дереве
Info *Search(Node *top, int SearchKey)
{
 
    if(top == NULL)
    {
        return RetInfo;
    }
    if(top -> data.Key == SearchKey)
    {
        RetInfo = &(top -> data);
    }
    else
    {
        if(top!=NULL)
            Search((top -> son), SearchKey);
 
        Search((top -> brother), SearchKey);
    }
    return RetInfo;
}
// Добавление элемента в дерево
void Add(Node *&top, int Key, int AddKey)
{
    Node *tmp= new Node;
    if(top == NULL)
    {
        
        top = new Node;
        top -> data.Key = Key;
        top -> brother = NULL;  
        top -> son = NULL;
        
        return;
    }
    else
    {
        if(top->data.Key == AddKey) 
        {
            Add(top->son, Key, AddKey); 
            return;
        }
        else
        {
            tmp=top;
            if(top!=NULL)
            {
                if(top!=NULL)
                {   
                    if(top->data.Key == AddKey)
                    {
                        Add(top->son->brother, Key, AddKey); 
                        return;
                    }
                    top=top->brother;
                }
                top=tmp;
                if(top->data.Key == AddKey)
                {
                    Add(top->son, Key, AddKey); 
                }
                top=top->son;
            }
        }
 
    }
 
}
 
//Вывод дерева на экран
void Display(Node *top, int lvl)
{
    lvl++;
    if(top==NULL) return;
    if(top!=NULL)
    {
        Display(top->brother,lvl);
        for(int i=1;i<=lvl*2;i++) cout << "  ";
        cout<<top->data.Key<<endl;
    }
    Display(top->son,lvl);
}
 
 
 
// Главная функция
void main()
{
    setlocale(LC_ALL,"Russian");
    
    int otv, SearchKey, lvl, Key, AddKey;
    do
    {
        cout << "Возможные действия:" << endl
            << "1. Добавить узел в дерево" << endl
            << "2. Вывести дерево на экран" << endl
            << "3. Поиск узла в дереве" << endl
            << "0. Выход" << endl
            << "Ваш выбор:";
        cin >> otv;
        cout << endl;
        system("cls");
        switch(otv)
        {
        case 1:
            cout << "Добавить узел:";
            cin >> Key;
            cout << "После:";
            cin >> AddKey;
            cout << endl;
            Add(top, Key, AddKey);
            cout << "Узел добавлен." << endl << endl;
            break;
        case 2:
            if(top==NULL) cout << " Дерево пустое." << endl;
            else 
            {
            cout << "Содержимое дерева: " << endl;
            lvl=0;
            Display(top,lvl);
            }
            cout << endl << endl;
            break;
        case 3:
 
            if(top==NULL) cout << " Дерево пустое." << endl;
            else
            {
                cout << "Найти узел:";
                cin >> SearchKey;
                cout << endl;
                RetInfo = Search(top, SearchKey);
                if(RetInfo == NULL)
                    cout << "Элемент не найден." << endl;
                else
                    cout << "Элемент найден." << top -> data.Key << endl;
                RetInfo=NULL;
            }
            break;
        
        case 0:
            otv = 0;
            break;
        default:
            cout << "Недопустимое значение" << endl << endl;
            break;
        }
    }
    while(otv != 0);
}
немного недоработал-неуспел
там проблема с добавление братьев
хотел бы знать ваше мнение

по задумке дерево должно выглядеть так:
C++
1
2
3
4
5
6
7
8
 
                A -- NULL
              /
             B---------------------------------C ------- NULL
           /                                  /
          D---E--NULL                       F----NULL
        /     /                            /
      NULL   NULL                         NULL
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2011, 18:01     рекурсия
Еще ссылки по теме:

Рекурсия - C++
#include&lt;stdio.h&gt; void gg(int a,int b) { int i=0; if(a==20) return; printf(&quot;%d\n&quot;,a); printf(&quot;%d\n&quot;,b); gg(a+1,b-1); ...

Рекурсия - C++
Не понимаю каков будет порядок действий в функции допустим когда(level =2). По тому как я понял работает рекурсия, когда начнется алгоритм...

Рекурсия - C++
Помогите написать рекурсию. Задание прилагаю

Рекурсия - C++
Сделайте одну програмку используя рекурсию. Очень нужно... Срочно. 1. Реализовать поиск НОД; 2. Возвести число в целую степень; ...


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

Или воспользуйтесь поиском по форуму:
vaselo
19 / 19 / 1
Регистрация: 17.10.2010
Сообщений: 247
12.07.2011, 18:01  [ТС]     рекурсия #10
все извините за недоспанную ночь, но мой последний пост, пост открывшего тему выглядел так:
дело в том, что мне и нужно произвольное колличество ссылок. в функции MakeSomeList видно, что у меня ограничения от 2 до 4 ссылок. код меня и препода вполне устраивает, вот только с этим алгоритмом обхода у меня проблема возникла,
нужно, чтоб дерево выглядело так:
C++
1
2
3
4
5
6
                              root(S)
                            /
                           r---f------K-----l
                          ///  ///    ////    //
                         t r l  kl;    jl;;k   ed
                      /////// /////  |||||  \\\\\\\
а у меня выглядит благодаря корявому алгоритму поиска путстого указателя в ф-ции FindEmptyPointer так:
C++
1
2
3
4
5
6
7
                    root(v)
                         /
                        r-()----()---()
                      /   |||    \\\   \\\
 
                      f---()-----()----()-----()-пустые узлы
                      /    |||     |||     |||     \\\
и оно увиличивается до громадных размеров, чтобы его нарисовать, вот на рис. сверху я поместил 18 символов, а на нижнем - 3

Добавлено через 6 часов 35 минут
всем спасибо, додумался сам, вечером кину код))) ура!!!!

Добавлено через 1 час 50 минут
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#include <string.h>
#include <iostream>
using namespace  std;
 
struct Node;
struct List{
    List* next;//след. ссылка
    Node* node;//ссылка
    };
struct Node{
    char s; //cимвол
    List* list;//ссылка на список
    };
 
List* MakeSomeList();
Node* Add(char s, Node* root, List* Empty);
List* FindEmptyPointer(Node* root, List* &Empty);//поиск "пустого" указателя
void Search(Node* root,char s,int &i);//поиск символа в дереве
void Search(Node* root,char s, int &i)
{
if(root)
{
    if(root->list->node)
    {
            if(root->list->node->s==s)
            {
                i++;
            }
    }
    List* p=root->list;
    while(p->next!=NULL)
    {
        if(p->next->node)
        {
            if(p->next->node->s==s)
            {
                i++;
            }
        }
        p=p->next;
    }
    Search(root->list->node,s,i);
}
}
 
void DelSomeNode(Node* root,char s,List* &Empty)
{
}
 
void PrintTree(Node* root)
{
if(root)
{
    if(root->list->node!=NULL)
    {
        cout<<root->list->node->s<<" ";
    }
    List* p=root->list;
    while(p->next!=NULL)
    {
        if(p->next->node!=NULL)
        {
            cout<<p->next->node->s<<" ";
        }
        p=p->next;
    }
    PrintTree(root->list->node);
}
}
 
List* MakeSomeList()
{
    List* p=new List;
    List* ptr=p;
    p->node=NULL;
    for(int i=rand()%2+2;i>0;i--)// создание ссылок наследования узла [2-4]
        {
            p->next=new List;
            p->next->node=NULL;//инициализируем НУЛЕМ указатели на узлы
            p=p->next;
        }
    p->next=NULL;
    p->node=NULL;
return ptr;
}
 
Node* Add(char s, Node* root,List* Empty)
{
    if(root==NULL)//если пустое дерево
        {
            root=new Node;
            root->s=s;
            root->list=MakeSomeList();
            return root;
        }
        List* p=FindEmptyPointer(root,Empty);//находим НУЛЕВУЮ ссылку в дереве,
        if(p!=NULL)
        {
            p->node=new Node;// по ней создаем узел
            p->node->s=s;
            Empty=NULL;
            p->node->list=MakeSomeList();//и этому узлу приписываем список указателей
        }
        else {cout<<"\n\n\n\t\tFatal ERROR";Sleep(1000);}
}
 
List* FindEmptyPointer(Node* root, List* &Empty)//поиск "пустого" указателя
{
    if(Empty!=NULL)
        return Empty;
    if(root->list->node==NULL)
    {
        Empty=root->list;
        return Empty;
    }
    List* p=root->list;
    while(p->next!=NULL)
    {
        if(p->next->node==NULL)
        {
            Empty=p->next;
            return Empty;
        }
        p=p->next;
    }
    FindEmptyPointer(root->list->node,Empty);
}
        
void main()
{
    char s, sw;//символы для управления меню
    int i=0;//для подсчета колличества символов
    Node* root=NULL;
    List* Empty=NULL;
    do  {
        system("CLS");
        cout<<"1.Add new symb\n2.Print Tree\n3.Delete finded\n4. Search\0.Exit";
        sw=getch();
            switch(sw)
            {
                case '1':cout<<"\n\nInput any symb>>";s=getch();cout<<"     "<<s;Sleep(400);
                        if(root==NULL)root=Add(s,root,Empty);
                        else Add(s,root,Empty);
                    break;
                case '2':cout<<endl<<root->s<<" "; PrintTree(root);system("pause");break;
                case '3':cout<<"\nInput char for deleting>>";cin>>s;DelSomeNode(root,s,Empty);break;
                case '4':cout<<"\nInput char for searching>>";cin>>s;i=0;
                        Search(root,s,i);if(root->s==s)i++;
                        if(i!=0)    cout<<"There are "<<i<<" same symbols at tree now";
                        else        cout<<"There are no such symbol as '"<<s<<"'!";
                        Sleep(1000);
                    break;
            }   }while(sw!='0');
}
Yandex
Объявления
12.07.2011, 18:01     рекурсия
Ответ Создать тему
Опции темы

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