public static bool ProvjeriFR(Cvor cvor) { if (cvor.Roditelj != null && cvor.Roditelj.FR == 2) { if (cvor.FR == 1) { Cvor pom1 = cvor.Roditelj; Cvor pom2 = cvor; LijevaRotacija(cvor.Roditelj, cvor); pom1.PostaviVisine(); pom2.PostaviVisine(); return(true); } if (cvor.FR == -1) { Cvor djed = cvor.Roditelj; Cvor pom = cvor.LijevoDijete; DesnaRotacija(cvor, pom); LijevaRotacija(djed, pom); cvor.PostaviVisine(); djed.PostaviVisine(); pom.PostaviVisine(); return(true); } } if (cvor.Roditelj != null && cvor.Roditelj.FR == -2) { if (cvor.FR == 1) { Cvor djed = cvor.Roditelj; Cvor pom = cvor.DesnoDijete; LijevaRotacija(cvor, pom); DesnaRotacija(djed, pom); cvor.PostaviVisine(); djed.PostaviVisine(); pom.PostaviVisine(); return(true); } if (cvor.FR == -1) { Cvor pom1 = cvor.Roditelj; Cvor pom2 = cvor; DesnaRotacija(cvor.Roditelj, cvor); pom1.PostaviVisine(); pom2.PostaviVisine(); return(true); } } if (cvor.Roditelj != null && cvor.Roditelj.FR == 0) { return(true); } return(false); }
static void PostaviVisineDel(Cvor cvor) { if (cvor == null) { return; } cvor.PostaviVisine(); Cvor tmp1; Cvor tmp2; Cvor tmp3; switch (cvor.FR) { case 0: PostaviVisineDel(cvor.Roditelj); return; case 1: return; case -1: return; case 2: switch (cvor.DesnoDijete.FR) { case 0: tmp1 = cvor; tmp2 = cvor.DesnoDijete; LijevaRotacija(cvor, cvor.DesnoDijete); PostaviVisineDel(tmp1); PostaviVisineDel(tmp2); return; case 1: tmp1 = cvor; tmp2 = cvor.DesnoDijete; LijevaRotacija(cvor, cvor.DesnoDijete); PostaviVisineDel(tmp1); PostaviVisineDel(tmp2); return; case -1: tmp1 = cvor; tmp2 = cvor.DesnoDijete; tmp3 = cvor.DesnoDijete.LijevoDijete; DesnaRotacija(tmp2, tmp3); LijevaRotacija(tmp1, tmp3); PostaviVisineDel(tmp1); PostaviVisineDel(tmp2); PostaviVisineDel(tmp3); return; } break; case -2: switch (cvor.LijevoDijete.FR) { case 0: tmp1 = cvor; tmp2 = cvor.LijevoDijete; DesnaRotacija(cvor, cvor.LijevoDijete); PostaviVisineDel(tmp1); PostaviVisineDel(tmp2); return; case -1: tmp1 = cvor; tmp2 = cvor.LijevoDijete; DesnaRotacija(cvor, cvor.LijevoDijete); PostaviVisineDel(tmp1); PostaviVisineDel(tmp2); return; case 1: tmp1 = cvor; tmp2 = cvor.LijevoDijete; tmp3 = cvor.LijevoDijete.DesnoDijete; LijevaRotacija(tmp2, tmp3); DesnaRotacija(tmp1, tmp3); PostaviVisineDel(tmp1); PostaviVisineDel(tmp2); PostaviVisineDel(tmp3); return; } break; } }