void print_in (struct arvore * tree)//imprime em ordem
{
    if (tree==NULL)
        return;
    print_in(tree->esq);
    printf(" %d ",tree->chave);
    print_in(tree->dir);
}
void task_monitor(){
	while(1){
		ACoreOs_task_wake_after(3000);
		int i;
		int flag;
		ACoreOs_task_state state;
		for(i = 0; i < globalInstrumentIndex; i ++){
			
			flag = ACoreOs_task_get_state(globalInstrumentInfo[i].taskId, &state);
			if(flag == ACOREOS_INVALID_ID)
				continue ;
			else if(flag == ACOREOS_INVALID_ADDRESS){
				printk_spinLock("ACOREOS_INVALID_ADDRESS!!\n");
				ACoreOs_task_wake_after(1000);
				break ;
			}else{
				if((state & ACOREOS_TASK_STATES_WAITING_FOR_MUTEX) == 0)
					break ;
			}
		}
		if(i == globalInstrumentIndex){
			print_in();
			ACoreOs_task_delete(ACOREOS_SELF);
		}	
	}
}
int menu ()//funcao que imprime o menu e executa a opcao escolhida
{
    int i,j,n,a;
    printf("\nO que deseja fazer agora? Digite o numero com sua opcao:\n");
    printf("1. Adicionar novos numeros.\n2. Remover um numero.\n3. Buscar um numero.\n4. Imprimir a arvore.\n5. Sair\nOpcao: ");
    scanf("%d",&i);
    switch (i)//pula para a opcao escolhida.
    {
        case 1:
            {
                printf("Quantos numeros pretende entrar? ");
                scanf("%d",&n);
                while (n<1)
                {
                    printf("Entre com pelo menos um numero. Quantos valores deseja entrar? ");
                    scanf("%d",&n);
                }
                printf("Entre com os numeros:\n");
                for (j=0;j<n;j++)
                {
                    scanf("%d",&a);
                    adicionar (a);
                }
                printf("Numeros adicionados!\n");
                return 0;
            }
        case 2:
            {
                printf("Qual numero voce deseja remover? ");
                scanf("%d",&a);
                if (busca(root,a)==1)
                {
                    remover(a);
                    printf("Item removido!\n");
                    return 0;
                }
                else
                {
                    printf("O item nao pode ser removido pois nao se encontra na arvore.\n");
                    return 0;
                }
            }
        case 3:
            {
                printf("Qual numero deseja buscar? ");
                scanf("%d",&a);
                if (busca(root,a)==1)
                    printf("Numero encontrado! Ele ja esta na arvore.\n");
                else
                    printf("Numero nao encontrado.\n");
                return 0;
            }
        case 4://conta com um switch interno, para que se escolha como sera impressa a arvore
            {
               printf("Como voce deseja imprimi-los?\n1. Em ordem.\n2. Pre-ordem.\n3. Pos-ordem.\n4. Labelled bracketing.\nOpcao: ");
               scanf("%d",&j);
               switch (j)
               {
                   case 1:
                       {
                           print_in(root);
                           printf("\n");
                           return 0;
                       }
                   case 2:
                       {
                           print_pre(root);
                           printf("\n");
                           return 0;
                       }
                   case 3:
                       {
                           print_pos(root);
                           printf("\n");
                           return 0;
                       }
                   case 4:
                       {
                           print_col(root);
                           printf("\n");
                           return 0;
                       }
                   default:
                       {
                           printf("Ocorreu um erro. Tente novamente.\n");
                           return 0;
                       }
               }
            }
        case 5:
            return 1;
        default:
            {
            printf("Ocorreu um erro. Tente novamente.\n");
            return 0;
            }
    }
}