• Jueves 14 de Noviembre de 2024, 04:08

Autor Tema:  Funcion Padre  (Leído 1810 veces)

rcarvajales

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Funcion Padre
« en: Miércoles 17 de Mayo de 2006, 11:43 »
0
Pues eso, a ver si hay algun crack por aqui que me diga como hacer una funcion q pasandole un arbol y un nodo nos devuelva a su padre

Saludos y Gracias

akai-chan

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Funcion Padre
« Respuesta #1 en: Miércoles 17 de Mayo de 2006, 16:47 »
0
Este procedimiento es para un ABC (arbol binario de busqueda) en el cual tiene los nodos ordenados. No se si es el que quieres pero a mano solo tngo este.
Si tu arbol no es ordenado tambien tengo el codigo pero ahora mismo no aqui.

A=arbol
n=nodo del q queremos sabel el padre
cap= primer nodo del arbol

Procedimiento Padre(var A : t_arbol, n : t_pos, cap: t_pos)
var c, a : t_pos;
var flag: boolean
Begin
if (n <> cap) then
   Begin
c=cap
flag=0
While (c<>NULL and flag=0) then
   Begin
If (c->valor=n)then
   Begin
   flag=1
   End
Else
   Begin
   If (c->valor=n) then
      a=c
      c=c->segdcha 'pasa al nodo hijo derecho
   Else
      a=c
      c=c->segizda 'pasa al nodo hijo izquierdo
   End
End

If (flag=1)
   Begin
   Mostrar (a->valor.id)
   End
Else  Mostrar (“el producto introducido no existe”)
   End
   End

         
hace muxo tiempo q lo ice...no se si lo entenderas
[size=109]En este mundo no existen las casualidades...
solo existe lo inevitable
[/size]

Danielo

  • Miembro activo
  • **
  • Mensajes: 69
    • Ver Perfil
Re: Funcion Padre
« Respuesta #2 en: Miércoles 17 de Mayo de 2006, 22:26 »
0
podrías apuntar cada nodo del árbol a su correspondiente nodo padre, claro que esto habría que hacerlo en la constructora que agrega un nuevo nodo (habría que ver como está definido el árbol y si es posible y vale la pena hacer algo así).
De esta forma para saber quien es el padre de un nodo cualquiera del árbol bastaría con retornar el puntero de ese nodo a su padre.
Recuerda siempre que eres único... Exactamente igual que todos los demás.
No existen frases de seis palabras.
Seamos realistas. Busquemos lo imposible.
Lo difícil tarda un poco en resolverse, lo imposible un poco más.

rcarvajales

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Funcion Padre
« Respuesta #3 en: Jueves 18 de Mayo de 2006, 13:51 »
0
Mirar, yo he creado una funcion  "esHijo(a:tipoArbol; nif:tipoNif):boolean;"
me devuelve true or false dependiendo si el nif es hijo directo del nodo que le he pasado

La funcion padre se encarga de ir corriendo el puntero de forma recursiva y voy haciendo sucesivas llamadas a la funcion esHijo hasta q salte, mi problema es que cuando salta, aun tiene pendientes varias llamadas recursivas, por lo que vuelve a llamar a la funcion es hijo con otros valores y claro, devuelve false y todo a tomar por culo. No se como hacerlo os adjunto el codigo por siaca veis algo raro:




rebosador

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Funcion Padre
« Respuesta #4 en: Miércoles 24 de Mayo de 2006, 18:32 »
0
hola, te mando la funcion es hijo modificada ya que la funcion es padre en principio la tienes bien aunq no se si e cambiado algo, miratela tb x si acaso, ok?

function eshijo (a:tipoarbolgen; nifcliente:tiponif; var encontrado:boolean):boolean;
  var
    aux:tipoarbolgen;
  begin
    eshijo:=false;
    aux:=a^.hijo;
    encontrado:=false;
    while (aux<>nil) and (not encontrado) do
      begin
        encontrado:=aux^.cliente.nif=nifcliente;   //compruebo si los nifs son iguales
        aux:=aux^.siguiente;
      end;
    eshijo:=encontrado;
  end;


y x si acaso la unidad padre:

function padre(a:tipoArbolGen; nifCliente:string):tipoArbolGen;
  var
    aux:tipoarbolgen;
    enc:boolean;
  begin
    aux:=a;
    padre:=nil;
    if eshijo (aux,nifcliente,enc) then
      padre:=aux
    else
      begin
        if not enc and (aux^.hijo<>nil) then
          padre:=padre (aux^.hijo,nifcliente);
        if not enc and (aux^.siguiente<>nil) then
          padre:=padre (aux^.siguiente,nifcliente);
      end;
  end;


gracias a ti tb xq me as dado ideas de como acer estas funciones q yo tb estaba un poco perdido... de todas formas el problema q tenias es q la funcion padre es recursiva xo la hijo no puede serlo nunk xq simplemente buscas entre todos sus hijos y ya esta...un saludo y espero q te haya servido de algo.