Exemple #1
0
        //Función para dibujar árbol binario
        public void DibujarArbol(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente, Pen Lapiz, Brush encuentro)
        {
            int x = 400;
            // Posiciones de la raíz del árbol
            int y = 75;

            if (Raiz == null)
            {
                return;
            }
            Raiz.PosicionNodo(ref x, y);
            //Posición de cada nodo
            Raiz.DibujarRamas(grafo, Lapiz);  //Dibuja los Enlaces entre nodos
            //Dibuja todos los Nodos
            Raiz.DibujarNodo(grafo, fuente, Relleno, RellenoFuente, Lapiz, encuentro);
        }
        //Función posición nodo (donde se ha creado dibujo del nodo)
        public void PosicionNodo(ref int xmin, int ymin)
        {
            int aux1, aux2;

            CoordenadaY = (int)(ymin + Radio / 2);
            //obtiene la posición del sub-árbol izquierdo
            if (Izquierdo != null)
            {
                Izquierdo.PosicionNodo(ref xmin, ymin + Radio + DistanciaV);
            }
            if ((Izquierdo != null) && (Derecho != null))
            {
                xmin += DistanciaH;
            }
            //si existe nodo derecho y el nodoizquierdo deja un espacio entre ellos
            if (Derecho != null)
            {
                Derecho.PosicionNodo(ref xmin, ymin + Radio + DistanciaV);
            }
            if (Izquierdo != null && Derecho != null)
            {
                CoordenadaX = (int)((Izquierdo.CoordenadaX + Derecho.CoordenadaX) / 2);
            }
            else
            if (Izquierdo != null)
            {
                aux1 = Izquierdo.CoordenadaX; Izquierdo.CoordenadaX = CoordenadaX - 80; CoordenadaX = aux1;
            }
            else
            if (Derecho != null)
            {
                aux2 = Derecho.CoordenadaX;
                //no hay nodo izquierdo, centrar en nodo derecho
                Derecho.CoordenadaX = CoordenadaX + 80;
                CoordenadaX         = aux2;
            }
            else
            {
                CoordenadaX = (int)(xmin + Radio / 2);
                xmin       += Radio;
            }
        }