📄 petre.cpp
字号:
#include<stdio.h>
#include<conio.h>
struct nod{
int data;
nod *stg,*drt;
};
void deleteRoot(nod*& rad);
void deletep(nod*& rad, int a);
nod* make_nod(int a)
{
nod* p;
p=new nod;
p->data=a;
p->stg=0;
p->drt=0;
return(p);
}
nod* insert(nod *r,int a)
{
if (r==0) return (make_nod(a));
else if (a< r->data)
r->stg = insert(r->stg,a);
else if(a>r->data)
r->drt=insert(r->drt,a);
return(r);
}
void inordine(nod* r)
{
if(r!=0){
inordine(r->stg);
printf("%d ",r->data);
inordine(r->drt);
}
}
nod* search(nod* r,int k)
{
if (r==0) return NULL;
else if (k<r->data)
return ( search(r->stg,k) );
else if (k>r->data)
return ( search(r->drt,k) );
else return (r);
}
nod* removeGreatest(nod*& r)
{
nod* p;
if( r->drt==0 ) {
p = r;
r = r->stg;
return p;
}
else return removeGreatest(r->drt);
}
void deleteRoot(nod*& rad)
{
nod* p = rad;
if(rad->stg==0) rad = rad->drt;
else if(rad->drt==0) rad = rad->stg;
else {
rad = removeGreatest (rad->stg);
rad->stg = p->stg;
rad->drt = p->drt;
}
delete p;
}
void deletep(nod*& rad, int a)
{
if(rad==NULL)
printf("Eroare: Valoarea %d nu este in arbore!", a);
else if( a<rad->data ) deletep(rad->stg,a);
else if( a>rad->data ) deletep(rad->drt,a);
else deleteRoot(rad);
}
void procedura(nod* r,int niv,int x,int lat)
{
if(r!=NULL){
gotoxy(x,niv);
printf("%d",r->data);
procedura(r->stg,niv+1,x-lat,lat/2);
procedura(r->drt,niv+1,x+lat,lat/2);
}
}
void main()
{
int a,b,c;
nod* rad=NULL;
clrscr();
printf("Int. datele:\n");
scanf("%d",&a);
while(a!=0){
rad=insert(rad,a);
scanf("%d",&a);
}
printf("\nINORDINE:");
inordine(rad);
printf("\nValoarea de cautat:");
scanf("%d",&b);
if(search(rad,b)==0)
printf("\n %d NU ESTE!!!",b);
else printf("\n%d ESTE!!!",b);
printf("\nValoarea de sters:");
scanf("%d",&c);
deletep(rad,c);
printf("\nINORDINE:");
inordine(rad);
getch();
clrscr();
procedura(rad,1,40,20);
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -