Funzioni Fondamenti Informatica (S. Cavalieri): DeleteABR

Page 1

ELIMINAZIONE ALBERO void Delete(abr *p, tipobaseABR x){ abr tmp; if(!EmptyABR(*p)){ if(!Confronta((*p)->info, x)){ tmp = *p; if(EmptyABR((*p)->leftchild)){ *p = (*p)->rightchild; free(tmp); }else if(EmptyABR((*p)->rightchild)){ *p = (*p)->leftchild; free(tmp); }else{ *p = DelMin(&(*p)->rightchild); (*p)->leftchild = (temp)->leftchild; (*p)->rightchild = (temp)->rightchild; free(tmp); } }else if(Confronta((*p)->info, x) > 0) Delete(&(*p)->leftchild); else Delete(&(*p)->rightchild); } }

ELIMINAZIONE FOGLIA O ELEMENTO CON UN SOLO FIGLIO (rightchild NULL)

*p CD00

FF00

tmp

CD00

FFOO NULL

FFOO

NULL NULL

ELIMINAZIONE ELEMENTO GENERICO AVENTE DUE FIGLI

30 *p HH00

UU00

tmp

HH00

16 AB00

FF00

28

14

*p UU00 ZK00 RICERCA DEL MINIMO DEI FIGLI PIU GRANDI DEL SOTTOALBERO

UU00

13

15

29

17

void DelMin(abr *p){

abr pmin; if((*p)->leftchild == ALBEROVUOTO){ pmin = *p; *p = (*p)->rightchild; return (pmin); }else return (DelMin(&(*p)->leftchild));

NULL ZK00 FF00AB00

ZK00

20 19

21 }


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.