Estimados,
Intengo encontrar el maximo valor, de un arbol, pero algo hago mal...Eh tratado de adaptar codigo, pero no estoy entendiendo...Me dan una mano? Muchas gracias!
#include <stdio.h>
#include <stdlib.h>
typedef struct arbol{
int dato;
struct arbol *der;
struct arbol *izq
}treenode;
void crear(treenode **arb);
void mostrarOrden (treenode *hoja);
void mostrarPreorden(treenode *hoja);
void mostrarPosorden(treenode *hoja);
int contarNodosHoja(treenode *p);
int sumarMultiplosDeCuatro(treenode *p);
treenode *primerNodo(treenode *hoja);
int sumatoriaImparesRaiz(treenode *p, int raiz);
int contarImparesRaiz(treenode *p, int raiz);
void insertar(treenode **hoja,int num);
int maximo(treenode *p);
int main(){
treenode *arb=NULL;
int max=0;
crear(&arb);
printf("\nMuestra En Orden\n");
mostrarOrden (arb);
printf("\nMuestra En PreOrden\n");
mostrarPreorden(arb);
printf("\nMuestra En PosOrden\n");
mostrarPosorden(arb);
max=maximo(arb);
printf("\Maximo: %d\n",max);
}
//Crea el Arbol
void crear(treenode **hoja){
int num;
printf("Ingrese Numero: ");
scanf("%d",&num);
while(num!=-1){
insertar(&(*hoja),num);
printf("Ingrese Numero: ");
scanf("%d",&num);
}
}
//Inserta Hoja al Arbol
void insertar(treenode **hoja,int num){
if(num==-1){
return;
}
if(*hoja==NULL){
(*hoja)=(treenode*)malloc(sizeof(treenode));
(*hoja)->dato=num;
(*hoja)->der=NULL;
(*hoja)->izq=NULL;
}else{
//Si el Numero es Mayor va a la Derecha
if(num>(*hoja)->dato){
insertar(&(*hoja)->der,num);
}else{
insertar(&(*hoja)->izq,num);
}
}
return;
}
//Mostrar en orden (Izquierda - Raiz - Derecha)
void mostrarOrden (treenode *hoja){
if (hoja!=NULL){
mostrarOrden(hoja->izq);
printf("%d ",hoja->dato);
mostrarOrden(hoja->der);
}
return;
}
//Mostrar en preOrden (Raiz - Izquierda - Derecha)
void mostrarPreorden(treenode *hoja){
if (hoja!=NULL){
printf("%d ",hoja->dato);
mostrarPreorden(hoja->izq);
mostrarPreorden(hoja->der);
}
return;
}
//mostrar en posOrden (Izquierda - Derecha - Raiz)
void mostrarPosorden(treenode *hoja){
if (hoja!=NULL){
mostrarPosorden(hoja->izq);
mostrarPosorden(hoja->der);
printf("%d ",hoja->dato);
}
return;
//Funcion Maximo
int maximo(treenode *p){
if(p==NULL){
return -99;
}else{
int temp ;
temp=max( maximo(p->izq), maximo(p->der));
return( max( p->dato , temp ) );
}
}
}
Si alguno tiene una idea, del por que no encuentra el dato y me entrega basura...voy a estar mas que agradecido! Saludos a todos!
Hecho!
//Maximo Nodo
int maxNodo(treenode *p){
if(p==NULL){
return -1;
}else{
if(p->der==NULL){
return p->dato;
}else{
return maxNodo(p->der);
}
}
}
//MIN NODO
int minNodo(treenode *p){
if(p==NULL){
return -1;
}else{
if(p->izq==NULL){
return p->dato;
}else{
return minNodo(p->izq);
}
}
}
Por las que alguien lo necesite!