,   CyberForum.ru

- C++

 
:  :  - 13,   - 4.77
kazakmik
1 / 1 / 0
: 13.04.2011
: 8
30.04.2012, 11:40     #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
//Ïðîãð*ìì* ôîðìèðóåò äåðåâî èç ì*ññèâ* öåëûõ ÷èñåë è âûâîäèò åãî ** ýêð**
//root - êîðå*ü äåðåâ*
 
#include <iostream.h>
#include <conio.h>
 
struct Node{
        int d;         //Ä***ûå ýëåìå*ò*
        Node *left;    //Ññûëê* ** ëåâîå ïîääåðåâî
        Node *right;   //Ññûëê* ** ïð*âîå ïîääåðåâî
};
 
Node *first(int d);                    //Ôîðìèðîâ**èå ïåðâîãî ýëåìå*ò*
Node *search_insert(Node *root,int d); //Ïîèñê ñ âêëþ÷å*èåì
void print_tree(Node *root,int l);     //Îáõîä äåðåâ*
 
//-------------------------------------------
 
int main()
{
        int l,b[]={10,25,20,6,21,8,1,30};
        Node *root=first(b[0]);    //Ôîðìèðóåì êîðå*ü äåðåâ*
      //Èùåì ìåñòî êóä* âñò*âèòü è âñò*âëÿåì *îâûå ýëåìå*òû
       for(int i=1;i<8;i++)search_insert(root, b[i]);
        print_tree(root,0);            //âûâîä äåðåâ* ** ýêð**
        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_tree(Node *p,int level){
        if(p){
                print_tree(p->left,level+1);           //Ïåðåìåùå*èå ïî ëåâûì ïîääåðåâüÿì
                for(int i=0;i<level;i++)cout<<"   ";
 
                cout<<p->d<<"\n";                      //âûâîä ç**÷å*èé äåðåâ*
              print_tree(p->right,level+1);          //Ïåðåìåùå*èå ïî ïð*âûì ïîääåðåâüÿì        
     }
}
Similar
41792 / 34177 / 6122
: 12.04.2006
: 57,940
30.04.2012, 11:40    
:

++ C++
C++ !
C++
C++
C++ .
C++
C++
C++



:
.

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