24/10/2010, 13:00
|
| | Fecha de Ingreso: octubre-2010
Mensajes: 13
Antigüedad: 14 años, 2 meses Puntos: 0 | |
Respuesta: ayuda arboles binarios Bueno esto es lo que tengo, solo tengo declarada la funcion de contar hojas pero esta vacia, y falta la funcion de contar la suma de todos los elemntos del arbol
Código:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct Nodo
{
int dato;
struct Nodo *HijoIzquierdo, *HijoDerecho;
} NodoArbol;
NodoArbol *Raiz;
//Declaro las funciones que tiene el programa
NodoArbol* InsertaNodo(int, NodoArbol*);
void EnOrden(NodoArbol*);
void PreOrden(NodoArbol*);
void PostOrden(NodoArbol*);
int Nivel_arbol(NodoArbol*);
int NumeroNodo(NodoArbol*);
int FE(NodoArbol*);
int Total_hojas(NodoArbol*);
int main()
{
int k,num,opc=1,valor,nivel=0,nodos=0,nivel_esperado,frecu=0,hojas=0;
Raiz=NULL;
while(opc!=10)
{
printf("1.- Insertar Arbol\n");
printf("2.- Recorrido en preorden\n");
printf("3.- Recorrido en orden\n");
printf("4.- Recorrido en postorden\n");
printf("5.- Nivel del arbol\n");
printf("6.- Numero de Nodos\n");
printf("7.- Nivel Perfecto de Nodos\n");
printf("8.- Factor de Equilibrio\n");
printf("9.- Numero de Hojas\n");
printf("10.- Salir\n");
scanf("%d",&opc);
switch(opc)
{
case 1:
printf("Inserta Numero para el Arbol\n");
scanf("%d",&num);
Raiz=InsertaNodo(num, Raiz);
//printf("Quieres seguir...");
break;
case 2: PreOrden(Raiz);
printf("\n");
break;
case 3: EnOrden(Raiz);
printf("\n");
break;
case 4: PostOrden(Raiz);
printf("\n");
break;
case 5:
nivel=Nivel_arbol(Raiz);
printf("Nivel del Arbol %d\n", nivel-1);
break;
case 6:
nodos=NumeroNodo(Raiz);
printf("Numero de Nodos %d\n", nodos);
break;
case 7:
nivel_esperado=log(NumeroNodo(Raiz))/log(2);
printf("El Nivel Perfecto %d\n", nivel_esperado);
break;
case 8:
frecu=FE(Raiz);
printf("Factor de Equilibrio es %d \n", frecu);
break;
case 9:
hojas=Total_hojas(Raiz);
break;
}
}
system("PAUSE");
return 0;
}
NodoArbol* InsertaNodo(int valor, NodoArbol *subArbol)
{
if(subArbol==NULL)
{
subArbol=new NodoArbol;
subArbol->HijoIzquierdo=subArbol->HijoDerecho=NULL;
subArbol->dato=valor;
}
else
if(valor<subArbol->dato)
subArbol->HijoIzquierdo=InsertaNodo(valor, subArbol->HijoIzquierdo);
else
subArbol->HijoDerecho=InsertaNodo(valor, subArbol->HijoDerecho);
return(subArbol);
}
void EnOrden(NodoArbol *subArbol)
{
if (subArbol!=NULL)
{
EnOrden(subArbol->HijoIzquierdo);
printf("%d ", subArbol->dato);
EnOrden(subArbol->HijoDerecho);
}
}
void PreOrden(NodoArbol *subArbol)
{
if (subArbol!=NULL)
{
printf("%d ", subArbol->dato);
PreOrden(subArbol->HijoIzquierdo);
PreOrden(subArbol->HijoDerecho);
}
}
void PostOrden(NodoArbol *subArbol)
{
if (subArbol!=NULL)
{
PostOrden(subArbol->HijoIzquierdo);
PostOrden(subArbol->HijoDerecho);
printf("%d ", subArbol->dato);
}
}
int Nivel_arbol(NodoArbol *subArbol)
{
int a=0,b=0;
if(subArbol==NULL)
{
return 1;
}
else
{
a=Nivel_arbol(subArbol->HijoIzquierdo)+1;
b=Nivel_arbol(subArbol->HijoDerecho)+1;
}
if(a>=b)
return a++; //Le sumo la raiz
else
return b++; //Le sumo la raiz
}
int NumeroNodo (NodoArbol *subArbol)
{
if(subArbol==NULL)
return 0;
else
return 1+NumeroNodo(subArbol->HijoIzquierdo)+NumeroNodo(subArbol->HijoDerecho);
}
int FE(NodoArbol *subArbol)
{
if(subArbol==NULL)
return 0;
else
return Nivel_arbol(subArbol->HijoDerecho)-Nivel_arbol(subArbol->HijoIzquierdo);
}
int Total_hojas(NodoArbol *subArbol)
{
}
|