Arb AB_CrNod(void *ch, Arb s, Arb d, Arb p, int dir) { Arb r=(Arb) malloc(sizeof(struct arb)); r->key=ch; r->st=s; r->dr=d; r->pred=p; if (p) switch(dir) { case -1: p->st=r;break; case 1: p->dr=r;break; case 0: ; } return r; } Arb AB_CrArb(Arb r, Arb s, Arb d) { assert(r); AB_SetSS(r,s); AB_SetSD(r,d); return r; } Arb AB_Copy(Arb a) { if (AB_Empty(a)) return NULL; Arb b=AB_CrNod(AB_GetKey(a),NULL,NULL,NULL,0); Arb s=AB_Copy(AB_GetSS(a)); Arb d=AB_Copy(AB_GetSD(a)); return AB_CrArb(b,s,d); }