Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/10/2010, 13:00
bofogdl
 
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)
{
	
}