recorrido por amplitud de un árbol en C
Publicado por frustrated (1 intervención) el 20/11/2004 16:54:13
Esto lo tengo que entragar el lunes a las 10 am, a ver si pueden ayudarme antes de eso...
El caso es que inserto nodos en un árbol binario balanceado... eso ya lo tengo...
Pero tengo que hacer el recorrido por amplitud del árbol e ir imprimiendo los nodos... (recorrido por amplitud es por niveles, primero la raiz, luego los nodos del siguiente nivel, luego los del siguiente nivel.. etc..)
Les paso el código que tengo...
Ok, entonces ya tengo un árbol binario balanceado... el problema es el recorrido por amplitud... tengo el algoritmo, pero no se como implementarlo... aqui se los paso a ver si alguien me puede echar una mano...
El caso es que inserto nodos en un árbol binario balanceado... eso ya lo tengo...
Pero tengo que hacer el recorrido por amplitud del árbol e ir imprimiendo los nodos... (recorrido por amplitud es por niveles, primero la raiz, luego los nodos del siguiente nivel, luego los del siguiente nivel.. etc..)
Les paso el código que tengo...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "stdio.h"
#include "stdlib.h"
struct nodos{
int dato; //dato que se almacenara en el nodo, este dato puede ser de cualquier tipo, incluso un registro
struct nodos *der; //generacion de las ramas del arbol hacia la derecha
struct nodos *izq; //generacion de las ramas del arbol hacia la izquierda
};
typedef struct nodos Arbol;
typedef Arbol *ARBOL;
void insertar(ARBOL*, int);
main(){
char sino;
int ele,x;
ARBOL raiz=NULL;//raiz, es el inicio del arbol
printf("cuantos quieres insertar?");
scanf("%d",&x);
for (int y = 0; y<x y++) {
printf("\nInsertar\n");
printf("\n\n\tIntroduce el elemento %d: ",y+1);
scanf("%d", &ele);//lectura del elemento o dato a almacenar en el arbol
insertar(&raiz,ele);//se envia a la funcion la direccion del inicio del arbol y el elemento a insertar
}//for
return 0;
}
void insertar(ARBOL *nodoarb, int valor) {
if (*nodoarb == NULL){ //Pregunta
*nodoarb = new(Arbol); //malloc(sizeof(Arbol));
if (*nodoarb != NULL){ //se crea el nuevo nodo del arbol y se almacenaran los datos
(*nodoarb)->dato=valor; //almacena el elemento que se envio
(*nodoarb)->der=NULL;
(*nodoarb)->izq=NULL;
}
else
printf("\n\tNo hay memoria suficiente\n");
}
else
if (valor < (*nodoarb)->dato) //si el valor a almacenar es menor que el valor del dato colocado en la raiz
insertar (&((*nodoarb)->izq), valor); //lo inserta a la izquierda
else
if (valor > (*nodoarb)->dato) //si es mayor
insertar (&((*nodoarb)->der), valor);//lo almacena a la derecha
else
printf("\n\tDato duplicado\n");//no se pueden duplicar los datos
}
Ok, entonces ya tengo un árbol binario balanceado... el problema es el recorrido por amplitud... tengo el algoritmo, pero no se como implementarlo... aqui se los paso a ver si alguien me puede echar una mano...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void amplitud(tarbol *a)
{
tCola cola; /* las claves de la cola serán de tipo árbol binario */
arbol *aux;
if (a != NULL) {
CrearCola(cola);
encolar(cola, a);
while (!colavacia(cola)) {
desencolar(cola, aux);
visitar(aux);
if (aux->izq != NULL) encolar(cola, aux->izq);
if (aux->der != NULL) encolar(cola, aux->der);
}
}
}
Valora esta pregunta


0