//Encuentra la posición en donde debe crearse el 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 (NodoIzquierdo != null) { NodoIzquierdo.PosicionNodo(ref xmin, ymin + Radio + DistanciaV); } if ((NodoIzquierdo != null) && (NodoDerecho != null)) { xmin += DistanciaH; } //Si existe el nodo derecho e izquierdo deja un espacio entre ellos. if (NodoDerecho != null) { NodoDerecho.PosicionNodo(ref xmin, ymin + Radio + DistanciaV); } // Posicion de nodos dercho e izquierdo. if (NodoIzquierdo != null) { if (NodoDerecho != null) { //centro entre los nodos. CoordenadaX = (int)((NodoIzquierdo.CoordenadaX + NodoDerecho.CoordenadaX) / 2); } else { // no hay nodo derecho. centrar al nodo izquierdo. aux1 = NodoIzquierdo.CoordenadaX; NodoIzquierdo.CoordenadaX = CoordenadaX - 40; CoordenadaX = aux1; } } else if (NodoDerecho != null) { aux2 = NodoDerecho.CoordenadaX; //no hay nodo izquierdo.centrar al nodo derecho. NodoDerecho.CoordenadaX = CoordenadaX + 40; CoordenadaX = aux2; } else { // Nodo hoja CoordenadaX = (int)(xmin + Radio / 2); xmin += Radio; } }
//Dibuja el árbol public void DibujarArbol(Graphics grafo, Font fuente, Brush Relleno, Brush RellenoFuente, Pen Lapiz, int dato, Brush encuentro) { Pen blackPen = new Pen(Color.Black, 1); int x = 100; int y = 75; if (Raiz == null) { return; } //Posicion de todos los Nodos. Raiz.PosicionNodo(ref x, y); //Dibuja los Enlaces entre nodos. Raiz.DibujarRamas(grafo, blackPen); //Dibuja todos los Nodos. Raiz.DibujarNodo(grafo, fuente, Relleno, RellenoFuente, Lapiz, dato, encuentro); }