Realiza buckle alternado solamente
Publicado por Cristian (1 intervención) el 05/11/2007 20:05:54
Bueno la idea del programa es que guarde todas las letras en el arbol, pero si existe devuelve el nodo del arbol, el problema es que solo ingresa de forma alternada, no logro saber cual es el error, ojala me puedan ayudar... aca les dejo una imagen
http://img111.imageshack.us/img111/7268/dibujoss8.jpg
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct nodo{
int index;
char *word;
struct nodo *sig;
}Nodo;
typedef struct arbol{
char letra;
struct nodo *sig;
struct arbol *izq,*der;
}Arbol;
Arbol *newnodo(char letra){
Arbol *nodo;
nodo=(Arbol*)malloc(sizeof(Arbol));
nodo->letra=letra;
nodo->sig=NULL;
nodo->izq=NULL;
nodo->der=NULL;
return(nodo);
}
Arbol *bc(Arbol **a,char letra){
Arbol *nuevo,*actual,*anterior;
actual=*a;
anterior=NULL;
int lnodo,l;
l=(int)letra;
while(actual && actual->letra!=letra){
lnodo=(int)actual->letra;
anterior=actual;
actual=(lnodo>l)?actual->izq:actual->der;
}
if(actual)
return(actual);
if(!anterior){
nuevo=newnodo(letra);
*a=nuevo;
return(nuevo);
}
else{
nuevo=newnodo(letra);
if(lnodo<l)
anterior->der=nuevo;
else
anterior->izq=nuevo;
return(nuevo);
}
}
void inorden(Arbol *a){
if(a){
inorden(a->izq);
printf("%c -> ",a->letra);
inorden(a->der);
}
}
main(){
Arbol *a,*na;
char letra;
int i;
a=NULL;
for(i=0;i<6;i++){
printf("Ingrese letra: ");
scanf("%c",&letra);
na=bc(&a,letra);
inorden(a);
}
}
http://img111.imageshack.us/img111/7268/dibujoss8.jpg
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct nodo{
int index;
char *word;
struct nodo *sig;
}Nodo;
typedef struct arbol{
char letra;
struct nodo *sig;
struct arbol *izq,*der;
}Arbol;
Arbol *newnodo(char letra){
Arbol *nodo;
nodo=(Arbol*)malloc(sizeof(Arbol));
nodo->letra=letra;
nodo->sig=NULL;
nodo->izq=NULL;
nodo->der=NULL;
return(nodo);
}
Arbol *bc(Arbol **a,char letra){
Arbol *nuevo,*actual,*anterior;
actual=*a;
anterior=NULL;
int lnodo,l;
l=(int)letra;
while(actual && actual->letra!=letra){
lnodo=(int)actual->letra;
anterior=actual;
actual=(lnodo>l)?actual->izq:actual->der;
}
if(actual)
return(actual);
if(!anterior){
nuevo=newnodo(letra);
*a=nuevo;
return(nuevo);
}
else{
nuevo=newnodo(letra);
if(lnodo<l)
anterior->der=nuevo;
else
anterior->izq=nuevo;
return(nuevo);
}
}
void inorden(Arbol *a){
if(a){
inorden(a->izq);
printf("%c -> ",a->letra);
inorden(a->der);
}
}
main(){
Arbol *a,*na;
char letra;
int i;
a=NULL;
for(i=0;i<6;i++){
printf("Ingrese letra: ");
scanf("%c",&letra);
na=bc(&a,letra);
inorden(a);
}
}
Valora esta pregunta


0