// ---------------------------------------------------------------------------- public void Agregar(object pElem) { if (Raiz == null) { Raiz = pElem; } else if (pElem.ToString().CompareTo(Raiz.ToString()) < 0) { if (SubArbolIzq == null) { SubArbolIzq = new CArbolBB(pElem); } else { SubArbolIzq.Agregar(pElem); } } else // pElem.ToString().CompareTo(arbol.Raiz.ToString()) > 0 { if (SubArbolDer == null) { SubArbolDer = new CArbolBB(pElem); } else { SubArbolDer.Agregar(pElem); } } }
public string ToFixedSizeString() { StringBuilder sb = new StringBuilder(); sb.Append(Grado.ToString().PadLeft(2, '0')); sb.Append('|'); sb.Append(Raiz.ToString().PadLeft(2, '0')); sb.Append('|'); sb.Append(Disponible.ToString().PadLeft(2, '0')); return(sb.ToString()); }
// ---------------------------------------------------------------------------- public void PostOrden() { if (Raiz != null) { // ----- Procesar hijo Izq if (SubArbolIzq != null) { SubArbolIzq.PostOrden(); } // ----- Procesar hijo Der if (SubArbolDer != null) { SubArbolDer.PostOrden(); } // ----- Procesar la raiz Console.WriteLine(Raiz.ToString()); } }
/// <summary> /// </summary> /// <returns>Arvore com os galhos: /// 6 /// / \ /// 3 5 /// / \ /// 2 0 /// / \ /// 1 \ /// </returns> public override string ToString() { int qtdEspacosLado = 3 * TamanhoMaiorGalho - 1; int qtdEspacosMeio = 1; string arvore = string.Format("{0}{1}\n", espacos(qtdEspacosLado), Raiz.ToString()); for (int i = 0; i < TamanhoMaiorGalho; i++) { qtdEspacosLado--; arvore += $"{espacos(qtdEspacosLado)}/{espacos(qtdEspacosMeio)}\\\n"; qtdEspacosLado--; qtdEspacosMeio += 2 + (GalhoDireita.ObterNumero(i) ?? " ").Length - (GalhoEsquerda.ObterNumero(i) ?? " ").Length; arvore += $"{espacos(qtdEspacosLado)}{GalhoEsquerda.ObterNumero(i) ?? "/"}{espacos(qtdEspacosMeio)}{GalhoDireita.ObterNumero(i) ?? "\\"}\n"; qtdEspacosMeio += 2; } return(arvore);
// ---------------------------------------------------------------------------- public CArbolBB Padre(object pRaiz) { if (EsVacio()) { return(null); } else if (EsHijo(pRaiz)) { return(this); } else if (pRaiz.ToString().CompareTo(Raiz.ToString()) < 0) { return(SubArbolIzq != null?SubArbolIzq.Padre(pRaiz) : null); } else { return(SubArbolDer != null?SubArbolDer.Padre(pRaiz) : null); } }
// ---------------------------------------------------------------------------- public CArbolBB SubArbol(object pRaiz) { if (EsVacio()) { return(null); } else if (Raiz.Equals(pRaiz)) { return(this); } else if (pRaiz.ToString().CompareTo(Raiz.ToString()) < 0) { return(SubArbolIzq != null?SubArbolIzq.SubArbol(pRaiz) : null); } else { return(SubArbolDer != null?SubArbolDer.SubArbol(pRaiz) : null); } }
public string ParaAjusteTamanoCadena() { return($"{Raiz.ToString("0000000000;-000000000")}" + MetodosNecesarios.Separador.ToString() + $"{Order.ToString("0000000000;-000000000")}" + MetodosNecesarios.Separador.ToString() + $"{SiguientePosicion.ToString("0000000000;-000000000")}\r\n"); }
// ---------------------------------------------------------------------------- public virtual void Eliminar(Object pRaiz) { if (EsVacio()) { Console.WriteLine("ERROR. Elemento no encontrado..."); } else { // ----- Verificar si la raiz es el elemento que se desea eliminar if (pRaiz.Equals(Raiz)) { // Si no tiene hijos, eliminar la raiz o una hoja if (SubArbolIzq == null && SubArbolDer == null) { Raiz = null; } else // árbol tiene por lo menos un hijo if (SubArbolIzq == null) // ----- Solo tiene hijo derecho { Raiz = SubArbolDer.Raiz; SubArbolIzq = SubArbolDer.SubArbolIzq; SubArbolDer = SubArbolDer.SubArbolDer; } else if (SubArbolDer == null) // ----- Solo tiene hijo izquierdo { Raiz = SubArbolIzq.Raiz; SubArbolDer = SubArbolIzq.SubArbolDer; SubArbolIzq = SubArbolIzq.SubArbolIzq; } else // Tiene ambos hijos { Raiz = SubArbolDer.Minimo(); SubArbolDer.Eliminar(Raiz); } } else // ----- Verificar si el elemento a eliminar esta en el hijo Izq if (pRaiz.ToString().CompareTo(Raiz.ToString()) < 0) { if (SubArbolIzq != null) { SubArbolIzq.Eliminar(pRaiz); } } else // ----- Elemento a eliminar esta en el hijo Der if (SubArbolDer != null) { SubArbolDer.Eliminar(pRaiz); } // Verificar si los hijos son hojas vacias if (SubArbolIzq != null && SubArbolIzq.EsVacio()) { SubArbolIzq = null; } if (SubArbolDer != null && SubArbolDer.EsVacio()) { SubArbolDer = null; } } }