Implementar em C uma árvore binária de pesquisa que armazena valores 
	do  tipo  inteiro.  O  programa  deve  oferecer  as  seguintes  opções  para  o 
	usuário: 
	1) Inserir um elemento (informado pelo usuário); 
	2) Buscar um elemento (é fornecida uma chave e a função informa se 
	encontrou ou não o elemento); 
	3) Imprimir o conteúdo da árvore (ao selecionar essa opção devem ser 
	mostrados  na  tela  os  dados  com  o  caminhamento  pré-fixado  a 
	esquerda); 
	4) Imprimir o nível da árvore; 
	5) Liberar a árvore da memória e encerrar.
 
	Meu código é este, porém tenho dúvidas em como fazer o item 4 e 5.
 
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include "arvore.h"
struct arvore {
    struct _arvore *esq;
    int valor;
    struct arvore *dir;
};
typedef struct arvore a;
a *raiz = NULL;
void Inserir(int x){
    a *novo = NULL;
    a *aux = NULL, *auxOld = NULL;
    novo = malloc (sizeof(a));
    novo -> valor = x;
    novo -> esq = NULL;
    novo -> dir = NULL;
    if (raiz == NULL){
        raiz = novo;
    }
    else {
        aux = raiz;
        while (aux != NULL){
            auxOld = aux;
            if (x < aux -> valor){
                aux = aux -> esq;
            }
            else {
                aux = aux -> dir;
            }
            if (x < auxOld -> valor){
                auxOld -> esq = novo;
            }
            else {
                auxOld -> dir = novo;
            }
        }
    }
}
void  Buscar(int x){
    setlocale (LC_ALL, "");
    a *aux = NULL;
    aux = raiz;
    while (aux != NULL) {
        if (x == aux -> valor) {
            printf("Elemento encontrado.\n");
        return;
        }
        else if (x < aux -> valor){
            aux = aux -> esq;
        }
        else {
           aux = aux -> dir;
        }
        if (aux == NULL){
            printf("Elemento não encontrado.\n");
        }
    }
}
void PrefixEsq(a *aux){
    if (aux == NULL){
        return;
    }
    printf("%d ", aux -> valor);
    PrefixEsq(aux -> esq);
    PrefixEsq(aux -> dir);
}
void PrefixDir(a *aux) {
  if (aux == NULL)
    return;
  printf("%d ", aux -> valor);
  PrefixDir(aux -> dir);
  PrefixDir(aux -> esq);
}
void ImprimirPreEsq(){
    PrefixEsq(raiz);
    printf("\n");
}