Ushtrim 1
#include <stdio.h>
#include <stdlib.h>
struct nyje{
int vl;
struct nyje *majte;
struct nyje *djathte;
};
struct nyje2{
int vl;
struct nyje *b1;
struct nyje *b2;
struct nyje *b3;
struct nyje *b4;
};
struct nyje3{
int vl;
struct nyje *b[4];
};
nyje * krijoElement(int vl){
nyje * p=(nyje *)malloc(sizeof(nyje));
p->vl=vl;
p->djathte=NULL;
p->majte=NULL;
}
nyje * krijoPeme(){
nyje * p1=krijoElement(1);
nyje * p2=krijoElement(2);
nyje * p3=krijoElement(3);
nyje * p4=krijoElement(4);
nyje * p5=krijoElement(5);
nyje * p6=krijoElement(6);
nyje * p7=krijoElement(7);
p1->majte=p2;
p1->djathte=p3;
p2->majte=p4;
p3->majte=p5;
p3->djathte=p6;
p6->majte=p7;
return p1;
}
//bredhja e pemeve
//pararendore,nderrendore,pasrendore
void pararendore(nyje * rrenja){
if(rrenja==NULL)
return;
printf("%d ",rrenja->vl);
pararendore(rrenja->majte);
pararendore(rrenja->djathte);
}
void nderrendore(nyje * rrenja){
if(rrenja==NULL)
return;
nderrendore(rrenja->majte);
printf("%d ",rrenja->vl);
nderrendore(rrenja->djathte);
}
void pasrendore(nyje * rrenja){
if(rrenja==NULL)
return;
pasrendore(rrenja->majte);
pasrendore(rrenja->djathte);
printf("%d ",rrenja->vl);
}
int shuma(nyje * rrenja){
if(rrenja==NULL)
return 0;
int a=nrNyje(rrenja->majte);
int b=nrNyje(rrenja->djathte);
return rrenja->vl+a+b;
}
bool kerko(nyje * rrenja,int vlera){
if(rrenja==NULL)
return false;
if(rrenja->vl==vlera)
return true;
bool a=kerko(rrenja->majte,vlera);
if(a)
return true;
bool b=kerko(rrenja->djathte,vlera);
return b;
}
int nrNyje(nyje * rrenja){
if(rrenja==NULL)
return 0;
int a=nrNyje(rrenja->majte);
int b=nrNyje(rrenja->djathte);
return 1+a+b;
}
int nrGjethe(nyje * rrenja){
if(rrenja==NULL)
return 0;
if(rrenja->majte==NULL && rrenja->djathte==NULL)
return 1;
int a=nrGjethe(rrenja->majte);
int b=nrGjethe(rrenja->djathte);
return a+b;
}
int nrNyjeBrendshme(nyje * rrenja){
if(rrenja==NULL)
return 0;
if(rrenja->majte==NULL && rrenja->djathte==NULL)
return 0;
int a=nrNyjeBrendshme(rrenja->majte);
int b=nrNyjeBrendshme(rrenja->djathte);
return 1+a+b;
}
int nrNyjeBrendshmePaRrenje(nyje * rrenja,int niveli){
if(rrenja==NULL)
return 0;
if(rrenja->majte==NULL && rrenja->djathte==NULL)
return 0;
int a=nrNyjeBrendshmePaRrenje(rrenja->majte,niveli+1);
int b=nrNyjeBrendshmePaRrenje(rrenja->djathte,niveli+1);
if(niveli==1)
return a+b;
return 1+a+b;
}
int elementeTek(nyje * rrenja){
if(rrenja==NULL)
return 0;
int a=elementeTek(rrenja->majte);
int b=elementeTek(rrenja->djathte);
if(rrenja->vl%2==1)//mund te vendoset cdo kusht
return 1+a+b;
return a+b;
}
int maksimum(nyje * rrenja){
if(rrenja==NULL)
return -9999;
int a=maksimum(rrenja->majte);
int b=maksimum(rrenja->djathte);
int max=a;
if(b>max)
max=b;
if(rrenja->vl>max)
max=rrenja->vl;
return max;
}
int lartesia(nyje * rrenja){
if(rrenja==NULL)
return 0;
int a=lartesia(rrenja->majte);
int b=lartesia(rrenja->djathte);
if(a>b)
return 1+a;
return 1+b;
}
bool pemeIdentike(nyje * P1,nyje * P2){
if(P1==NULL && P2==NULL)
return true;
if(P1==NULL && P2!=NULL || P1!=NULL && P2==NULL)
return false;
if(P1->vl!=P2->vl)
return false;
bool a=pemeIdentike(P1->majte,P2->majte);
if(a==false)
return false;
bool b=pemeIdentike(P1->djathte,P2->djathte);
return b;
}
int nivelimax(nyje * rrenja){
int nr=0;
nyje * p=rrenja;
while (p!=NULL){
nr++;
p=p->majte;
}
return nr;
}
nyje * gjejMajtas(nyje * rrenja){
nyje * p=rrenja;
while(p->majte!=NULL)
p=p->majte;
return p;
}
nyje * gjejPrind(nyje * rrenja, int nivelMax,int niveli){
if(niveli==nivelMax)
return NULL;
if(niveli==nivelMax-1 && (rrenja->majte==NULL || rrenja->djathte==NULL))
return rrenja;
nyje * a=gjejPrind(rrenja->majte,nivelMax,niveli+1);
if(a!=NULL)
return a;
nyje * b=gjejPrind(rrenja->djathte,nivelMax,niveli+1);
return b;
}
nyje * futElement(nyje * rrenja,int vl){
nyje * eliri=krijoElement(vl);
if(rrenja==NULL)
return eliri;
int a=nivelimax(rrenja);
nyje * prindi=gjejPrind(rrenja,a,1);
if(prindi==NULL)
prindi=gjejMajtas(rrenja);
if(prindi->majte==NULL)
prindi->majte=eliri;
else
prindi->djathte=eliri;
return rrenja;
}
int main(){
nyje * rrenja=krijoPeme();
/*
nyje * rrenja=NULL;//=krijoPeme();
for(int i=1;i<=7;i++)
rrenja=futElement(rrenja,i);
*/
printf("Pararendore: ");
pararendore(rrenja);
printf("\n");
printf("Nderrendore: ");
nderrendore(rrenja);
printf("\n");
printf("Pasrendore: ");
pasrendore(rrenja);
printf("\n");
printf("Numri i nyjeve te pemes eshte %d\n",nrNyje(rrenja));
printf("Numri i nyjeve gjethe te pemes eshte %d\n",nrGjethe(rrenja));
printf("Numri i nyjeve te brendshme te pemes eshte %d\n",nrNyjeBrendshme(rrenja));
printf("Numri i nyjeve te brendshme te pemes pa rrenjen eshte %d\n",nrNyjeBrendshmePaRrenje(rrenja,1));
/*
printf("Numri i elementeve tek te pemes eshte %d\n",elementeTek(rrenja));
*/
return 0;
}
Ushtrim 2
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct peme{
int vl;
struct peme *majte;
struct peme *djathte;
};
peme * krijoElement(int vl){
peme * p=(peme *)malloc(sizeof(peme));
p->vl=vl;
p->djathte=NULL;
p->majte=NULL;
}
void paraRendore(peme * T){
if(T!=NULL){
printf("%d ",T->vl);
paraRendore(T->majte);
paraRendore(T->djathte);
}
}
void nderRendore(peme * T){
if(T!=NULL){
nderRendore(T->majte);
printf("%d ",T->vl);
nderRendore(T->djathte);
}
}
void pasRendore(peme * T){
if(T!=NULL){
pasRendore(T->majte);
pasRendore(T->djathte);
printf("%d ",T->vl);
}
}
peme * KrijoPemeBinareParaRendore(int n){
peme *kulmiri;
int x,sasiM,sasiD;
if(n==0)
return NULL;
sasiM=n/2;
sasiD=n-sasiM-1;
scanf("%d",&x);
kulmiri=krijoElement(x);
kulmiri->majte=KrijoPemeBinareParaRendore(sasiM);
//kulmiri=krijoElement(x);nderrendore
kulmiri->djathte=KrijoPemeBinareParaRendore(sasiD);
//kulmiri=krijoElement(x);pasrendore
return kulmiri;
}
int nrNyje(peme * T){
if(T==NULL)
return 0;
int resM=nrNyje(T->majte);
int resD=nrNyje(T->djathte);
return 1+resM+resD;
}
int shuma(peme * T){
if(T==NULL)
return 0;
int resM=shuma(T->majte);
int resD=shuma(T->djathte);
return T->vl+resM+resD;
}
int nrNegativ(peme * T){
if(T==NULL)
return 0;
int resM=nrNegativ(T->majte);
int resD=nrNegativ(T->djathte);
if(t->vl<0)
return 1+ resM+resD;
return resM+resD;
}
int max(peme * T){
if(T==NULL)
return -9999;
int resM=max(T->majte);
int resD=max(T->djathte);
if(T->vl>resM && T->vl>resD)
return T->vl;
if(resM>resD)
return resM;
return resD;
}
int nrGjethe(peme * T){
if(T==NULL)
return 0;
if(T->majte==NULL && T->djathte==NULL)
return 1;
int resM=nrGjethe(T->majte);
int resD=nrGjethe(T->djathte);
return resM+resD;
}
int nrNyjeBrendshme(peme * T){
if(T==NULL)
return 0;
if(T->majte==NULL && T->djathte==NULL)
return 0;
int resM=nrNyjeBrendshme(T->majte);
int resD=nrNyjeBrendshme(T->djathte);
return 1+resM+resD;
}
int lartesi(peme * T){
if(T==null)
return 0;
int resM=lartesi(T->majte);
int resD=lartesi(T->djathte);
if(resM>resD)
return 1+resM;
return 1+resD;
}
int largesiRrugeMax(peme * T){
if(T==NULL)
return 0;
if(T->majte==NULL && T->djathte==NULL)
return 0;
int resM=largesiRrugeMax(T->majte);
int resD=largesiRrugeMax(T->djathte);
if(resM>resD)
return resM;
return resD;
}
boolean identike (peme * T1, peme * T2){
if(T1==NULL && T2==NULL)
return true;
if(T1==NULL && T2!=NULL || T1!=NULL && T2==NULL)
return false;
if(T1->vl!=T2->vl)
return false;
int resM=identike(T1->majte,T2->majte);
if(!resM)
return false;
int resD=identike(T1->djathte,T2->djathte);
return resD;
}
int maxpoz(int v[], int n){
if(n==1)
return 0;
int poz=maxpoz(v,n-1);
if(v[n-1]>v[poz])
return n-1;
return poz;
}
int main(){
printf("fillim\n");
struct peme * T=KrijoPemeBinareParaRendore(7);
paraRendore(T);printf("\n");
nderRendore(T);printf("\n");
pasRendore(T);printf("\n");
printf("Numri i elementeve eshte %d\n",nrNyje(T));
printf("Shume e elementeve eshte %d\n",shuma(T));
printf("\nfund");
return 0;
}