2
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 move to the function the pointer to the node of the tree, and a pointer to integer, and this pointer to integer go through the tree being compared with the other data.
At the end, this pointer will have the memory address of the largest integer in the tree, but when I have it printed on main, it does not give the right return, the variable maior
continues with the same value I initialized. Can anyone give me a light? I hope to 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);
}
}