Beispiel #1
0
        public void DisminuirClave(int valornodo, int datonuevo, Graphics g, BinomialTree ab)
        {
            if (valornodo == ab.valor)//Se ha llegado al nodo destino
            {
                ab.valor = datonuevo;
                ab.visitado = true;
                if (ab.nodopadre != null)
                    ab.nodopadre.visitado = true;
                if (ab.nodohijo.Count > 0)
                    ab.nodohijo[0].visitado = true;
                ab.Dibujar(g, ab);
                Thread.Sleep(tiempo);
                ab.visitado = false;
                if (ab.nodopadre != null)
                    ab.nodopadre.visitado = false;
                if (ab.nodohijo.Count > 0)
                    ab.nodohijo[0].visitado = false;

                if (ab.nodopadre != null && ab.nodopadre.valor > datonuevo)//Cambia hijo con padre
                {
                    ab.nodohermano = ab.nodopadre.nodohermano;
                    ab.nodopadre.nodohermano = null;
                    ab.nodopadre.nodopadre = ab;
                    ab.nodohijo.Add(ab.nodopadre);
                    ab.nodopadre = null;
                }

                ab.Dibujar(g, ab);
            }
            else
            {
                foreach (BinomialTree ahijo in ab.nodohijo)
                {
                    DisminuirClave(valornodo, datonuevo, g, ahijo);
                }
            }
        }