Eliminar nodo en un arbol binario

Iniciado por DaNuK, 3 Diciembre 2010, 20:56 PM

0 Miembros y 1 Visitante están viendo este tema.

DaNuK

Saludos a todos compañeros del foro vengo a molestarlos por que me he topado con un problema al querer eliminar un nodo en un arbol a continuacion les pongo el codigo aplica para los tres casos
Problema: no me elimina el nodo
Código (csharp) [Seleccionar]

        public void Eliminar( NodoAB r, int dato)
        {
            NodoAB aux = null, aux1 = null, otro = null;           
            if (dato < r.Dato)
            {
                Eliminar(r.Izq, dato);
            }
            else
            {
                if (dato > r.Dato)
                {
                    Eliminar(r.Der, dato);
                }
                else
                {
                    otro = r;


                    if (otro != null)
                    {
                        if ((otro.Der == null) && (otro.Izq == null))
                        {
                            otro = null;
                        }
                        else
                        {
                            if (otro.Der == null)
                            {
                                r = otro.Izq;
                               
                            }
                            else
                                if (otro.Izq == null)
                                {
                                    r= otro.Der;
                                   
                                }
                                else
                                {
                                    aux = otro.Izq;
                                    aux1 = aux;
                                    while (aux.Der != null)
                                    {
                                        aux1 = aux;
                                        aux = aux.Der;
                                    }
                                    otro.Dato = aux.Dato;
                                    otro = aux;
                                    aux1.Der = aux.Izq;
                                    aux = null;

                                }
                        }
                    }
                    else
                        System.Windows.Forms.MessageBox.Show("Dato no encontrado en el arbol");
                }
            }
        }

espero me puedan ayudar

<a href ="http://programacionrapido.blogspot.com">Programacion .Net</a>

raul338

Podrias poner como queda el arbol al principio y al final?

DaNuK

Ya resolvi el problema de eliminar pero ahora me surgio otra duda como contar nodos intermedios
el siguiente codigo es para contar hojas o terminales que le podria modificar para contar nodos intermedios
Código (csharp) [Seleccionar]

Public int ContarH(NodoAB r)
{
    if(r==null)
         return 0;
    if(r.der==null && r.izq==null)
         return 1;
    else
         return (ContarH(r.der)+ContarH(r.izq));
}


espero me puedan ayudar

<a href ="http://programacionrapido.blogspot.com">Programacion .Net</a>

EddyC

#3
si te referis con nodos intermedios a que le mandas una altura y contas todos los de esa altura es facil te escribo el pseudo :

mostrarnodosalt(puntero a raiz  *R , entero de altura que queres mostrar )
{int n;
if (*r)
  { if(altura==1)
           n=1;
    else
         {if(h<1)
                return 0;
          n=0;
         }
     return mostrarnodosalt(r por izquierda, altura - 1 ) + mostrarnodosalt(r por derecha , altura -1) + n ;
  }
return 0;
}


si no te referias a esto decime y veo si te puedo ayudar , saludos

DaNuK

Lo que yo quiero es saber cuantos nodos de bifurcacion hay en un arbol binario
ejemplo:

en el arbol anterior hay dos nodos de bifurcacion el 8 y el 17 lo que quiero es que el programa me diga cuantos nodos de bifurcacion hay en un arbol
espero me haya explicado ayudenme porfavor

<a href ="http://programacionrapido.blogspot.com">Programacion .Net</a>