Exemplo n.º 1
0
        private vor BrišiMin(vor vor)
        {
            if (vor.levo == null)
            {
                return(null);
            }

            if ((vor.levo != null && vor.levo.levo != null) && (!vor.levo.crven && !vor.levo.levo.crven))
            {
                vor = SpojiLevo(vor);
            }

            vor.levo = BrišiMin(vor.levo);

            // provera uslova:
            if ((vor.desno != null && vor.desno.crven) && (vor.levo == null || !vor.levo.crven))
            {
                vor = vor.RotirajLevo();
            }
            if ((vor.levo != null && vor.levo.crven) && (vor.levo.levo != null && vor.levo.levo.crven))
            {
                vor = vor.RotirajDesno();
            }
            if ((vor.levo != null && vor.levo.crven) && (vor.desno != null && vor.desno.crven))
            {
                vor.PromeniBoje();
            }

            return(vor);
        }
Exemplo n.º 2
0
 private vor SpojiLevo(vor vor)
 {
     vor.PromeniBoje();
     if (vor.desno != null && vor.desno.levo != null && vor.desno.levo.crven)
     {
         // Dva crvena čvora za redom
         vor.desno = vor.desno.RotirajDesno();
         vor       = vor.RotirajLevo();
         vor.PromeniBoje();
     }
     return(vor);
 }
Exemplo n.º 3
0
        private vor DodajČvor(vor vor, int noviKljuč, object noviElement)
        {
            if (vor == null)
            {
                return(new  vor(noviKljuč, noviElement)
                {
                    crven = true
                });
            }

            if (vor.ključ == noviKljuč)
            {
                vor.obj = noviElement;
            }
            else
            {
                if (vor.ključ <= noviKljuč)
                {
                    vor.desno = DodajČvor(vor.desno, noviKljuč, noviElement);
                }
                else
                {
                    vor.levo = DodajČvor(vor.levo, noviKljuč, noviElement);
                }
            }

            // provera uslova:
            if ((vor.desno != null && vor.desno.crven) && (vor.levo == null || !vor.levo.crven))
            {
                vor = vor.RotirajLevo();
            }
            if ((vor.levo != null && vor.levo.crven) && (vor.levo.levo != null && vor.levo.levo.crven))
            {
                vor = vor.RotirajDesno();
            }
            if ((vor.levo != null && vor.levo.crven) && (vor.desno != null && vor.desno.crven))
            {
                vor.PromeniBoje();
            }

            return(vor);
        }
Exemplo n.º 4
0
        private vor BrišiČvor(vor vor, int ključ, out bool uspešnaOperacija)
        {
            if (vor == null)
            {
                uspešnaOperacija = false;
                return(null);
            }

            if (vor.ključ > ključ)
            {
                if ((vor.levo != null && vor.levo.levo != null) && (!vor.levo.crven && !vor.levo.levo.crven))
                {
                    vor = SpojiLevo(vor);
                }
                vor.levo = BrišiČvor(vor.levo, ključ, out uspešnaOperacija);
            }
            else
            {
                if (vor.levo != null && vor.levo.crven)
                {
                    vor = vor.RotirajDesno();
                }
                if (ključ == vor.ključ && vor.desno == null)
                {
                    uspešnaOperacija = true;
                    return(null);
                }
                if ((vor.desno != null && vor.desno.levo != null) && !vor.desno.crven && !vor.desno.levo.crven)
                {
                    vor = SpojiDesno(vor);
                }
                if (vor.ključ == ključ)
                {
                    vor pom = Min(vor.desno);
                    vor.ključ = pom.ključ;
                    vor.obj   = pom.obj;
                    vor.desno = BrišiMin(vor.desno);

                    uspešnaOperacija = true;
                }
                else
                {
                    vor.desno = BrišiČvor(vor.desno, ključ, out uspešnaOperacija);
                }
            }

            // provera uslova:
            if (vor != null)
            {
                if ((vor.desno != null && vor.desno.crven) && (vor.levo == null || !vor.levo.crven))
                {
                    vor = vor.RotirajLevo();
                }
                if ((vor.levo != null && vor.levo.crven) && (vor.levo.levo != null && vor.levo.levo.crven))
                {
                    vor = vor.RotirajDesno();
                }
                if ((vor.levo != null && vor.levo.crven) && (vor.desno != null && vor.desno.crven))
                {
                    vor.PromeniBoje();
                }
            }

            return(vor);
        }