Alberi binari

Alberi con al più 2 figli per ogni nodo

Dichiarazioni

typedef struct nodo
{
    int info;
    struct nodo *sx, 
                *dx;
} NODO;

typedef NODO *ptree;

Operazioni

Visite

void preorder(ptree p)
{
    if(p != NULL)
    {
        printf("%d ", p->info);
        preorder(p->sx);
        preorder(p->dx);
    }
}
void inorder(ptree p)
{
    if(p != NULL)
    {
        inorder(p->sx);
        printf("%d ", p->info);
        inorder(p->dx);
    }
}
void postorder(ptree p)
{
    if(p != NULL)
    {
        postorder(p->sx);
        postorder(p->dx);
        printf("%d ", p->info);
    }
}

Contare i nodi

int conta_nodi(ptree p)
{
    if(p == NULL)
        return 0;
    else
        return 1+conta_nodi(p->sx)+conta_nodi(p->dx);
}

Eliminare tutti i nodi

void ret_tree(ptree *p)
{
    if((*p) != NULL)
    {
        ret_tree(&((*p)->sx));
        ret_tree(&((*p)->dx));
        free((*p));
        (*p)=NULL;
    }
}