#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 = (arvbin) malloc(sizeof(arvbin));
    arvbin b = (arvbin) malloc(sizeof(arvbin));
    arvbin c = (arvbin) malloc(sizeof(arvbin));
    arvbin 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 = -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);
    }
}