public static bool CompararValor(NodoArbolBinario nodoArbolBinario, int valor)
        {
            if (nodoArbolBinario == null)
            {
                return(false);
            }

            if (nodoArbolBinario.ObtenerValor() == valor || CompararValor(nodoArbolBinario.ObeterNodoIzquierda(), valor) ||
                CompararValor(nodoArbolBinario.ObeterNodoDerecha(), valor))
            {
                return(true);
            }

            return(false);
        }
        //Inserta los valores ingresados al arreglo del árbol binario
        private NodoArbolBinario InsertarNodo(NodoArbolBinario nodoArbolBinario, int Nodo)
        {
            if (nodoArbolBinario == null)
            {
                nodoArbolBinario = new NodoArbolBinario(Nodo);
                return(nodoArbolBinario);
            }

            if (nodoArbolBinario.ObtenerValor() < Nodo)
            {
                nodoArbolBinario.AsignarNodoDerecha(InsertarNodo(nodoArbolBinario.ObeterNodoDerecha(), Nodo));
            }

            else
            {
                nodoArbolBinario.AsignarNodoIzquierda(InsertarNodo(nodoArbolBinario.ObeterNodoIzquierda(), Nodo));
            }

            return(nodoArbolBinario);
        }
        private static Resultado ObtenerAncestroComunMasCercano(NodoArbolBinario NodoArbol, int valor1, int valor2, NodoArbolBinario nodoPadre = null)
        {
            if (NodoArbol == null)
            {
                return(new Resultado());
            }

            Resultado result = new Resultado();

            if (NodoArbol.ObtenerValor() == valor1)
            {
                result.ExisteNodo1 = true;

                if (NodoArbol.ObeterNodoDerecha() != null && NodoArbol.ObeterNodoDerecha().ObtenerValor() == valor2)
                {
                    result.NodoArbol = nodoPadre;
                }
                else if (NodoArbol.ObeterNodoIzquierda() != null && NodoArbol.ObeterNodoIzquierda().ObtenerValor() == valor2)
                {
                    result.NodoArbol = nodoPadre;
                }
                else
                {
                    result.NodoArbol = NodoArbol;
                }
                return(result);
            }

            if (NodoArbol.ObtenerValor() == valor2)
            {
                result.ExisteNodo2 = true;
                if (NodoArbol.ObeterNodoDerecha() != null && NodoArbol.ObeterNodoDerecha().ObtenerValor() == valor1)
                {
                    result.NodoArbol = nodoPadre;
                }
                else if (NodoArbol.ObeterNodoIzquierda() != null && NodoArbol.ObeterNodoIzquierda().ObtenerValor() == valor1)
                {
                    result.NodoArbol = nodoPadre;
                }
                else
                {
                    result.NodoArbol = NodoArbol;
                }
                return(result);
            }

            Resultado resultadoIzquierda = ObtenerAncestroComunMasCercano(NodoArbol.ObeterNodoIzquierda(), valor1, valor2, NodoArbol);
            Resultado resultadoDerecha   = ObtenerAncestroComunMasCercano(NodoArbol.ObeterNodoDerecha(), valor1, valor2, NodoArbol);

            if (resultadoIzquierda.NodoArbol != null && resultadoDerecha.NodoArbol != null)
            {
                result.ExisteNodo2 = true;
                result.ExisteNodo1 = true;
                result.NodoArbol   = NodoArbol;
                return(result);
            }


            if (resultadoIzquierda.NodoArbol != null)
            {
                result.ExisteNodo1 = true;
                result.NodoArbol   = resultadoIzquierda.NodoArbol;
                return(result);
            }

            result.ExisteNodo2 = true;
            result.NodoArbol   = resultadoDerecha.NodoArbol;
            return(result);
        }
예제 #4
0
 public void AsignarNodoDerecha(NodoArbolBinario nodoDerecho)
 {
     derecha = nodoDerecho;
 }
예제 #5
0
 public void AsignarNodoIzquierda(NodoArbolBinario nodoIzquierdo)
 {
     izquierda = nodoIzquierdo;
 }
 public void InsertarNodo(int Nodo)
 {
     nodoRaiz = InsertarNodo(nodoRaiz, Nodo);
 }
 public void CrearNodoRaiz(NodoArbolBinario nodoArbolBinario)
 {
     nodoRaiz = nodoArbolBinario;
 }