Como colocar essa saída?

Boa noite ! Estou com um probleminha aqui. Meu algoritmo funciona na parte da criação e inserção dos elementos na árvore de busca , mas não estou conseguindo colocar a saída igual à saída pedida no exercício , será que alguém poderia me dar uma luz de como posso prosseguir.

Link da questão : https://www.urionlinejudge.com.br/judge/pt/problems/view/1195

#include<stdio.h>
#include<stdlib.h>

struct Tree{ 

    struct Tree *left;
    struct Tree *right;
    int info;

};

typedef struct Tree *tree; 

tree *new_tree(){

    tree *raiz=(tree*) malloc(sizeof(tree));

    if(raiz!=NULL){

        *raiz = NULL;
    }
    return raiz;
}

int insert (tree *raiz,int valor){

    if(raiz == NULL){
        return 0;
    }
    struct Tree *new = (struct Tree*) malloc(sizeof(struct Tree));
    
    if(new == NULL){
        return 0;
    }

    new->info = valor;
    new->right = NULL;
    new->left = NULL;   
    
    if(*raiz == NULL){
        *raiz = new;
    }
    else{

        struct Tree *constant = *raiz;
        struct Tree *ant = NULL;

        while(constant != NULL){

            ant = constant;

            if(valor == constant->info){
                free(new);
                return 0; 
            }
            if(valor > constant->info){
                constant = constant->right;
            }
            else{
                constant= constant->left;
            }
        }
        
        if(valor > ant->info){

            ant->right = new;
        }
        else{

            ant->left = new;
        }
    }
    return 1;
}
void pre_order(tree *raiz){
    
    if(raiz == NULL){
        return;
    }
    if(*raiz != NULL){
        
        printf("\nPre .: %d",(*raiz)->info);
        pre_order(&((*raiz)->left));
        pre_order(&((*raiz)->right));
    }
}
void in_order(tree *raiz){
    
    if(raiz == NULL){
        return;
    }
    if(*raiz != NULL){

        in_order(&((*raiz)->left));
        printf("\nIn..: %d",(*raiz)->info);     
        in_order(&((*raiz)->right));
    }
}
void post_order(tree *raiz){
    
    if(raiz == NULL){
        return ;
    }
    if(*raiz != NULL){

        post_order(&((*raiz)->left));    
        post_order(&((*raiz)->right));
        printf("\nPost:%d",(*raiz)->info); 

    }
}

int main(){

    tree *raiz= new_tree();

    int casos,elements,num[500],j,i;

    printf("Type numbre of cases");
    scanf("%d",&casos);

    for(i=0;i<casos;i++){

        printf("Type numbre of elements");
        scanf("%d",&elements);

        for(j=0;j<elements;j++){
            
            scanf("%d",&num[j]);
            insert(raiz,num[j]); 
        }     

        printf("Case %d: ",i);
        pre_order(raiz);
        in_order(raiz);
        post_order(raiz);
        *raiz = NULL;  
    }
    return 0;
}