Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication8.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include<iostream>
- #include<stdlib.h>
- #include<stdio.h>
- #include<malloc.h>
- using namespace std;
- using namespace System;
- struct arbbin
- {
- int inf;
- arbbin *ss, *sd;
- };
- arbbin *cnod(int k, arbbin *stg, arbbin *drt)
- {
- //arbbin *t = new arbbin;//folosim new sau delete
- arbbin *t =
- t->ss = stg;
- t->sd = drt;
- t->inf = k;
- return t;
- }
- int sterg(arbbin*& pa)
- {
- if (pa->ss)
- return sterg(pa->ss);//se merghe catre cel mai din stanga nod
- else
- {
- arbbin*a = pa;
- int k = a->inf;
- pa = pa->sd;
- free(a);
- return k;
- }
- }
- int max(int a, int b)
- {
- return(a > b) ? a : b;
- }
- arbbin *insnr(arbbin *rad, int k)
- {
- if (!rad)
- return cnod(k, NULL, NULL);//Arbore vid,noul creat este radacina
- else//Arbore nevid
- {
- arbbin *aux = rad;
- while (1)
- if (k < rad->inf)//test daca nodul se va insera in subarborele stang
- if (rad->ss) rad = rad->ss;//Trecerea in subarborele stang
- else//subarbore vid.deci inserare nod si terminare
- {
- rad->ss = cnod(k, NULL, NULL);
- return aux;
- }
- else if (k > rad->inf)//test daca nodul se va insera in subarborele drept
- if (rad->sd)rad = rad->sd;//trecere in subarborele drept
- else//subarbore vid,deci inserare nod si terminare
- {
- rad->sd = cnod(k, NULL, NULL);
- return aux;
- }
- else//cazul in care nodul exista deja
- {
- printf("\n Nod existent");//console writeline
- return aux;
- }
- }
- }
- //recursiv
- arbbin *ins(arbbin *rad, int k)
- {
- if (rad)
- {
- if (k < rad->inf)rad->ss = ins(rad->ss, k);
- else if (k > rad->inf)rad->sd = ins(rad->sd, k);
- else cout << "\n Nod inexistent";
- return rad;
- }
- else return cnod(k, NULL, NULL);
- }
- //Parcurgere radacina stanga-dreapta sau in ordine
- void preord(arbbin *rad)
- {
- if (rad)
- {
- printf("%5d", rad->inf);
- preord(rad->ss);
- preord(rad->sd);
- }
- }
- void inord(arbbin *rad)
- {
- if (rad)
- {
- inord(rad->ss);
- printf("%5d", rad->inf);
- inord(rad->sd);
- }
- }
- //stergerea unui nod
- void stergere_nod(arbbin*& rad, int k)
- {
- arbbin *aux;
- //se cauta nodul de sters
- if (!rad) cout << "Nodul nu exista" << k;
- else if (k < rad->inf)stergere_nod(rad->ss, k);
- else if (k > rad->inf)stergere_nod(rad->sd, k);
- else
- {//nodul s-a gasit
- aux = rad;
- //se testeaza daca are 7un descendent vid
- if (!aux->sd) {
- rad = aux->ss, free(aux);
- }
- else if (!aux->ss) { rad = aux->sd, free(aux); }
- else //nu are nici un descendent vid
- rad->inf = sterg(rad->sd);
- }
- }
- int nr_noduri(arbbin *rad)
- {
- if (rad)return 1 + nr_noduri(rad->ss) + nr_noduri(rad->sd);
- else return 0;
- }
- //nr de lv arb
- int inaltime(arbbin *rad)
- {
- if (rad) return 1 + max(inaltime(rad->ss), inaltime(rad->sd));
- else return 0;
- }
- //afisarea nodurilor de pe un anumit nivel
- void afis_nivel(arbbin *rad, int niv)
- {
- if (rad)
- if (!niv)
- cout << rad->inf;
- else
- {
- afis_nivel(rad->ss, niv - 1);
- afis_nivel(rad->sd, niv - 1);
- }
- }
- void main()
- {
- arbbin *arb = NULL;
- struct obs x[NOBS] = {
- {19500.,29}, {21300.,20},
- {30005., 10}, {41240., 2},
- {30005., 5}, {27500., 7},
- {19500., 11}, {21300.,20}
- };
- for (int poz = 0; poz < NOBS; poz++)insarb(arb, x[poz].termx[poz].frecv);
- putchar("\n");
- print(arb);
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement