示例#1
0
 public Nodo(int ndato, Nodo nDerecho, Nodo nIzquierdo, Nodo nPadre)
 {
     dato = ndato;
     Izquierdo = nIzquierdo;
     Derecho = nDerecho;
     Padre = nPadre;
     altura = 0;
 }
示例#2
0
        public Nodo buscar(int dato, Nodo t)
        {
            Nodo aux = t;
            while (aux != null)
            {
                if (dato == aux.dato)
                {
                    return aux;
                }

                if (dato < aux.dato)
                {
                    aux = aux.Izquierdo;
                }

                else
                {
                    aux = aux.Derecho;
                }
            }
            return null;
        }
示例#3
0
        public Nodo Insertar(int nDato, Nodo t, int nNivel)
        {
            if (t == null)
            {
                t = new Nodo(nDato, null, null, null);
                t.nivel = nNivel;
            }
            else if (nDato < t.dato)
            {
                nNivel++;
                t.Izquierdo = Insertar(nDato, t.Izquierdo, nNivel);
            }
            else if (nDato > t.dato)
            {
                nNivel++;
                t.Derecho = Insertar(nDato, t.Derecho, nNivel);
            }
            else
            {
                MessageBox.Show("Dato existente en el Árbol", "Error de ingreso");
            }

            return t;
        }
示例#4
0
 private static int Alturas(Nodo t)
 {
     return t == null ? -1 : t.altura;
 }
示例#5
0
        public void Eliminar(int nDato, ref Nodo t)
        {
            if (t != null)
            {
                if (nDato < t.dato)
                {
                    Eliminar(nDato, ref t.Izquierdo);
                }
                else
                {
                    if (nDato > t.dato)
                    {
                        Eliminar(nDato, ref t.Derecho);
                    }
                    else
                    {
                        Nodo nodoAEliminar = t; // ya se ubico el nodo a eliminar
                        if (nodoAEliminar.Derecho == null)
                        {
                            t = nodoAEliminar.Izquierdo;
                        }
                        else
                        {
                            if (nodoAEliminar.Izquierdo == null)
                            {
                                t = nodoAEliminar.Derecho;
                            }
                            else
                            {
                                if (Alturas(t.Izquierdo) - Alturas(t.Derecho) > 0)
                                {
                                    // Para verificar que hijo pasa a ser una nueva raiz del subárbol
                                    Nodo AuxiliarNodo = null;
                                    Nodo Auxiliar = t.Izquierdo;
                                    bool Bandera = false;

                                    while (Auxiliar.Derecho != null)
                                    {
                                        AuxiliarNodo = Auxiliar;
                                        Auxiliar = AuxiliarNodo.Derecho;
                                        Bandera = true;
                                    }

                                    t.dato = Auxiliar.dato;
                                    nodoAEliminar = Auxiliar;

                                    if (Bandera == true)
                                    {
                                        AuxiliarNodo.Derecho = Auxiliar.Izquierdo;
                                    }
                                    else
                                    {
                                        t.Izquierdo = Auxiliar.Izquierdo;
                                    }
                                }
                                else
                                {
                                    if (Alturas(t.Derecho) - Alturas(t.Izquierdo) > 0)
                                    {
                                        Nodo AuxiliarNodo = null;
                                        Nodo Auxiliar = t.Derecho;
                                        bool Bandera = true;

                                        while (Auxiliar.Izquierdo != null)
                                        {
                                            AuxiliarNodo = Auxiliar;
                                            Auxiliar = Auxiliar.Izquierdo;
                                            Bandera = true;
                                        }

                                        t.dato = Auxiliar.dato;
                                        nodoAEliminar = Auxiliar;

                                        if (Bandera == true)
                                        {
                                            AuxiliarNodo.Izquierdo = Auxiliar.Derecho;
                                        }
                                        else
                                        {
                                            t.Derecho = Auxiliar.Derecho;
                                        }
                                    }
                                    else
                                    {
                                        if (Alturas(t.Derecho) - Alturas(t.Izquierdo) == 0)
                                        {
                                            Nodo AuxiliarNodo = null;
                                            Nodo Auxiliar = t.Izquierdo;
                                            bool Bandera = false;

                                            while (Auxiliar.Derecho != null)
                                            {
                                                AuxiliarNodo = Auxiliar;
                                                Auxiliar = Auxiliar.Derecho;
                                                Bandera = true;
                                            }

                                            t.dato = Auxiliar.dato;
                                            nodoAEliminar = Auxiliar;

                                            if (Bandera == true)
                                            {
                                                AuxiliarNodo.Derecho = Auxiliar.Izquierdo;
                                            }
                                            else
                                            {
                                                t.Izquierdo = Auxiliar.Izquierdo;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("Nodo NO existe en el Árbol","Error de eliminación");
            }
        }