////////////////////////////////////
// REALIZZAZIONE DI ALBERI        //
// AUTORE: Farinelli Agnese       //
// DATA: 26 Febbraio 2009         //
////////////////////////////////////

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

typedef struct cella * albero;
typedef struct cella * nodo;
typedef int tipoelem;

struct cella{
  tipoelem valore;
  nodo radice, padre, figlio, primofiglio, succfratello;
};

// Funzione CREAALBERO
// Creo un albero vuoto.
albero CREAALBERO(){
  albero T = NULL;
  return T;
}

// Funzione PADRE
// Raggiungo il padre del nodo inserito
nodo PADRE(nodo u){
  u->padre;
  return u;
}

// Funzione PRIMOFIGLIO
// Accedo al primo figlio del nodo inserito
nodo PRIMOFIGLIO(nodo u){
  u->primofiglio;
  return u;
}

// Funzione SUCCFRATELLO
// Accedo al fratello successivo
nodo SUCCFRATELLO(nodo u){
  u->succfratello;
  return u;
}

// Funzione ALBEROVUOTO
// Controllo se l'albero inserito è vuoto oppure no.
// Restituisco 1 se è VERO, 0 se è FALSO.
int ALBEROVUOTO(albero T){
  if (T == NULL)
    return 1;
  else
    return 0;
}

// Funzione FOGLIA
// Dato un nodo u controlla se è una foglia oppure no.
// Restituisce 1 se è VERO, 0 se è FALSO.
int FOGLIA(nodo u){
  if(!u->figlio)
    return 1;
  else
    return 0;
}

// Funzione FINEFRATELLI
// Verifica se esistono altri fratelli successivi al nodo dato
// Restituisce 1 se è VERO, 0 se è FALSO.
int FINEFRATELLI(nodo u){
  if(!u->succfratello)
    return 1;
  else
    return 0;
}

// Funzione INSRADICE
// Crea un albero con il solo nodo radice
nodo INSRADICE(albero T){
  return T;
}
  
//CANCSOTTOALBERO
//INSSOTTOALBERO