Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: DaNuK en 3 Diciembre 2010, 20:56 pm



Título: Eliminar nodo en un arbol binario
Publicado por: DaNuK en 3 Diciembre 2010, 20:56 pm
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
  1.        public void Eliminar( NodoAB r, int dato)
  2.        {
  3.            NodoAB aux = null, aux1 = null, otro = null;            
  4.            if (dato < r.Dato)
  5.            {
  6.                Eliminar(r.Izq, dato);
  7.            }
  8.            else
  9.            {
  10.                if (dato > r.Dato)
  11.                {
  12.                    Eliminar(r.Der, dato);
  13.                }
  14.                else
  15.                {
  16.                    otro = r;
  17.  
  18.  
  19.                    if (otro != null)
  20.                    {
  21.                        if ((otro.Der == null) && (otro.Izq == null))
  22.                        {
  23.                            otro = null;
  24.                        }
  25.                        else
  26.                        {
  27.                            if (otro.Der == null)
  28.                            {
  29.                                r = otro.Izq;
  30.  
  31.                            }
  32.                            else
  33.                                if (otro.Izq == null)
  34.                                {
  35.                                    r= otro.Der;
  36.  
  37.                                }
  38.                                else
  39.                                {
  40.                                    aux = otro.Izq;
  41.                                    aux1 = aux;
  42.                                    while (aux.Der != null)
  43.                                    {
  44.                                        aux1 = aux;
  45.                                        aux = aux.Der;
  46.                                    }
  47.                                    otro.Dato = aux.Dato;
  48.                                    otro = aux;
  49.                                    aux1.Der = aux.Izq;
  50.                                    aux = null;
  51.  
  52.                                }
  53.                        }
  54.                    }
  55.                    else
  56.                        System.Windows.Forms.MessageBox.Show("Dato no encontrado en el arbol");
  57.                }
  58.            }
  59.        }
  60.  
espero me puedan ayudar


Título: Re: Eliminar nodo en un arbol binario
Publicado por: raul338 en 3 Diciembre 2010, 22:54 pm
Podrias poner como queda el arbol al principio y al final?


Título: Re: Eliminar nodo en un arbol binario
Publicado por: DaNuK en 5 Diciembre 2010, 01:25 am
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
  1. Public int ContarH(NodoAB r)
  2. {
  3.    if(r==null)
  4.         return 0;
  5.    if(r.der==null && r.izq==null)
  6.         return 1;
  7.    else
  8.         return (ContarH(r.der)+ContarH(r.izq));
  9. }
  10.  

espero me puedan ayudar


Título: Re: Eliminar nodo en un arbol binario
Publicado por: EddyC en 5 Diciembre 2010, 21:16 pm
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 :

Código:
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


Título: Re: Eliminar nodo en un arbol binario
Publicado por: DaNuK en 6 Diciembre 2010, 20:19 pm
Lo que yo quiero es saber cuantos nodos de bifurcacion hay en un arbol binario
ejemplo:
(http://img232.imageshack.us/img232/3941/gesl.jpg)
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