,   CyberForum.ru

- C++

 
kazakmik
1 / 1 / 0
: 13.04.2011
: 8
07.05.2012, 08:41     #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
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
172
173
174
175
176
177
178
179
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<fstream.h>
#include<string.h>
#include<iomanip.h>
struct Node{
        int d;         //Ä***ûå ýëåìå*ò*
        Node *left;    //Ññûëê* ** ëåâîå ïîääåðåâî
        Node *right;   //Ññûëê* ** ïð*âîå ïîääåðåâî
};
 
Node *first(int d);                    //Ôîðìèðîâ**èå ïåðâîãî ýëåìå*ò*
Node *search_insert(Node *root,int d); //Ïîèñê ñ âêëþ÷å*èåì
void sozd (Node *root);        //ñîçä**èå
//void print_tree(Node *root,int l);
void print(Node *root, int x, int y); //âûâîä
Node *del_tree(Node *root); //Óä*ëå*èå
Node* preorder(Node *root); //Îáõîäû
Node* postorder(Node *root);
Node* inorder(Node *root);
int height(Node *root);    //Îïðåäåëå*èå âûñîòû äåðåâ*
int count_elem(Node *root);         //Êîëè÷åñòâî ýëåìå*òîâ
//-------------------------------------------
 
void main()
{int vibor; Node *root;
clrscr();
while (vibor!=8){
 cout<<"\n1.Sozdanie iz faila i vivod \n";
 cout<<"2.Udalenie \n";
 cout<<"3.nishodyachiy  obhod\n";
 cout<<"4.voshodyachiy obhod\n";
 cout<<"5.posledovatel'ny obhod\n";
 cout<<"6.vysota dereva\n";
 cout<<"7.podschet elementov \n";
 cout<<"8.Vihod \n";
 cin>>vibor;
 if(vibor==1)sozd(root);
 if(vibor==2)del_tree(root);
 if(vibor==3)preorder(root);
 if(vibor==4)postorder(root);
 if(vibor==5)inorder(root);
 if(vibor==6)height(root);
 if(vibor==7)count_elem(root);}
}
void sozd(Node *root)
{
        int l,b[9];//={10,25,20,6,21,8,1,30};
        clrscr();
        ifstream f("D:\person.txt");
        cout<<"skolko chisel ";
        cin>>l;
        for(int i=0;i<l; i++)
        f>>b[i];
        root=first(b[0]);    //Ôîðìèðóåì êîðå*ü äåðåâ*
                                   //Èùåì ìåñòî êóä* âñò*âèòü è âñò*âëÿåì *îâûå ýëåìå*òû
       for(int i=1;i<8;i++)search_insert(root, b[i]);
        //print_tree(root,0);            //âûâîä äåðåâ* ** ýêð**
        //cin>>l;
       // print(root,40,1) ;
        cout<<"\n";
        system("pause");
        //cin>>l;
        //return 0;
}
 
//--------------------------------------------
 
//Ôîðìèðîâ**èå ïåðâîãî ýëåìå*ò*
 
Node *first(int d){
Node *pv =new Node;   //Ñîçä*¸ì ýëåìå*ò
pv->d=d;              //Ïðèñâ*èâ*åì ç**÷å*èå ýëåìå*òó ïîëÿ
pv->left=0;           //Ññûëê* ** ëåâîå ïîääåðåâî ð*â** NULL
pv->right=0;          //Ññûëê* ** ïð*âîå ïîääåðåâî ð*â** NULL
return pv;            //Âîçâð*ù*åì *äðåñ ýëåìå*ò*
}
 
//---------------------------------------------
 
 
//Ïîèñê ñ âêëþ÷å*èåì
Node *search_insert(Node *root,int d){
Node*pv=root,*prev;
bool found = false;    //Ïåðåìå***ÿ îòâå÷*þù*ÿ ç* òî ÷òî **øëè ëè ýëåìå*ò èëè *åò
/*Íèæå ïðèâåä¸* *ëãîðèòì ïîèñê* êîðî÷å åñëè **øëè ò*êîé æå ýëåìå*ò òî ìû åãî *å âñò*âëÿåì â äåðåâî âûõîäèì èç ôó*êöèè âîçâð*òèâ *äðåñ ñîâï*âøåãî ýëåìå*ò**/
while(pv&&!found){
        prev=pv;                       //ïîëó÷*åì *äðåñ ýëåìå*ò* îò êîòîðîãî áóäåì ïóñê*òü êîð*è
        if(d==pv->d)found=true;        //ñîâï*äå*èå âûõîäèì èç öèêë*
        else if(d<pv->d)pv=pv->left;   //Âñîâûâ*åìÿ â ëåâîå ïîääåðåâî
        else pv=pv->right;             //Âñîâûâ*åìÿ â ïð*âîå ïîääåðåâî 
//Âûõîä èç öèêë* îñóùåñòâëÿåòñÿ, òîãä* êîãä* **øëè ñâîáîä*ûé *äðåñ : ññûëêó ó äåðåâ* : äëÿ âñò*âêè *îâîãî óçë* */
}
//---------------------------
/*Åñëè ñîâï*ëî ç**÷å*èå ýëåìå*ò* ñî ç**÷å*èåì ýëåìå*ò* êîòîðûé õîòèì âñò*âèòü òî âûõîäèì èç ôó*êöèè âîçâð*ù*ÿ *äðåñ ýëåìå*ò*
ñ êîòîðûì ñîâï*ëî */
if(found)return pv;               
//Ñîçä**èå *îâîãî óçë*
Node *pnew =new Node;
pnew->d=d;
pnew->left=0;
pnew->right=0;
if(d<prev->d)
//Ïðèñîåäè*å*èå ê ëåâîìó ïîääåðåâó ïðåäê*
prev->left=pnew;
else 
//ïðèñîåäè*ÿåì ê ïð*âîìó ïîääåðåâó ïðåäê*
prev->right=pnew;
return pnew;
}
//---------------------------------------
void print(Node *p,int x, int y)
{
  static level=0;
  if(p!=NULL)
  {
    level++;
    int delta=80/(2<<(level+1));
    gotoxy(x,y);
    cout<<p->d;
    int savedlevel=level;
    print(p->right,x-delta, y+1);
    level=savedlevel;
    print(p->left,x+delta, y+1);
  }                               }
                     // udalenie dereva
Node *del_tree(Node *root)
{clrscr();
if (root==0)
{while(root!=0)
{root->left=del_tree(root->left);
root->right=del_tree(root->right);
delete root;
root=0;}}
return 0;}
                       //  nishodyachiy  obhod
Node* preorder(Node *root)
{clrscr();
if(root!=NULL)
{cout<<root->d<<endl;
preorder(root->left);
preorder(root->right);}
return root;}
                       // voshodyachiy obhod
Node* postorder(Node *root)
{clrscr();
if(root!=NULL)
{preorder(root->left);
preorder(root->right);
cout<<root->d<<endl;}
return root;}
                       // posledovatel'ny obhod
Node* inorder(Node *root)
{clrscr();
if(root!=NULL)
{preorder(root->left);
cout<<root->d<<endl;
preorder(root->right);}
return root;}
                    //vysota dereva
int height(Node *root)
{clrscr();
if(root==NULL)
return 0;
{if(root->left==NULL&&root->right==NULL)
return 0; else
if(height(root->left)>height(root->right))
 return height(root->left)+1; else
return height(root->right)+1;}}
                   // podschet elementov
int count_elem(Node *root)
{clrscr();
if (root==NULL)
return 0;else
{int count=1;
count=count_elem(root->left)+1;
 count=count_elem(root->right)+1;
 return count;}}
Similar
41792 / 34177 / 6122
: 12.04.2006
: 57,940
07.05.2012, 08:41    
:

C++
, . C++
C++
C++ ""
C++
C++
C++
C++



:
.

: 05:41. GMT +3.
- , ,
-
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
@Mail.ru