Good morning, I'm trying to create a recursive function that traverses a binary tree and finds the largest integer contained in the nodes.
My idea is to pass the pointer to the tree node, and a pointer to integer, and this pointer to integer go through the tree being compared to the other data.
In the end, this pointer will have the memory address of the largest integer in the tree, but when I press the main, it does not give the right return, the variable maior
continues with the same value that I initialized. Can anyone give me a light? I hope I have explained clearly hehe.
The function in question is encontraMaior
.
#include <stdlib.h>
#include <stdio.h>
typedef int tree_info;
typedef struct no_arvbin * arvbin;
struct no_arvbin {
arvbin esq;
tree_info dado;
arvbin dir;
};
void preordem(arvbin t);
/**Ex 1**/void preordemprintafolha(arvbin t);
/**Ex 2**/void encontraMaior(arvbin t, int *maior);
void criaRaiz (arvbin t);
int main()
{
arvbin a;
a = (arvbin) malloc(sizeof(arvbin));
arvbin b;
b = (arvbin) malloc(sizeof(arvbin));
arvbin c;
c = (arvbin) malloc(sizeof(arvbin));
arvbin d;
d = (arvbin) malloc(sizeof(arvbin));
criaRaiz(a);
criaRaiz(b);
criaRaiz(c);
criaRaiz(d);
a->dado = 6;
b->dado = 3;
c->dado = 2;
d->dado = 4;
a->esq = b;
a->dir = c;
b->esq = d;
int maior;
maior = -1;
encontraMaior(a, &maior);
printf("%d", maior);
return 0;
}
void criaRaiz (arvbin t){
t->esq = NULL;
t->dir = NULL;
}
void preordem(arvbin t){
if(t != NULL){
printf("%d\n", t->dado);
preordem(t->esq);
preordem(t->dir);
}
}
void preordemprintafolha(arvbin t){
if(t != NULL){
if(t->dir == NULL && t->esq == NULL){
printf("%d\n", t->dado);
}
preordemprintafolha(t->esq);
preordemprintafolha(t->dir);
}
}
void encontraMaior(arvbin t, int *maior){
/*system("pause\n");
printf("%d ", *maior);
printf(" %p\n", maior);
system("pause");*/
if(t != NULL){
if(*maior < t->dado){
maior = &t->dado;
printf("%p %p", maior, &t->dado);
}
encontraMaior(t->esq, maior);
encontraMaior(t->dir, maior);
}
}