Un albero è un qualsiasi grafico aciclico.
In un albero non orientato, qualsiasi nodo può essere la radice, poiché tutti i bordi sono non orientati e quindi non esiste una relazione "genitore / figlio". Molti di questi non sono in genere considerati come alberi e non sono disegnati come tali, ma si applicano tutte le definizioni matematiche.
In un albero diretto, di solito c'è una singola radice, se si definisce se la direzione dei bordi è "figlio- gen" o "genitore- > figlio". Quale di solito è un dettaglio di implementazione: le strutture in memoria hanno in genere puntatori da genitore a figlio, i database relazionali utilizzano chiavi esterne da bambini a genitore.
Si noti che un albero diretto non può avere radice se la direzione degli archi non rappresenta una relazione genitore / figlio. Questo è ancora un tre, ma la maggior parte delle semplificazioni di implementazione tipiche di un terzo diretto sono meno ovvie. In tal caso, un'implementazione potrebbe trattare i tre come non orientati o aggiungere un albero radice sottostante etichettando separatamente le relazioni padre / figlio.
In questo caso la direzione del bordo viene disegnata in modo incoerente, ma immagino che qualsiasi implementazione ne sceglierebbe una e capovolgere le frecce di una metà, così si termina con un albero con radici piuttosto standard. Ovviamente, per mantenere la sottostruttura del 'prefisso' separata da quella del 'suffisso', vorrei usare due alberi indipendenti, o inizializzare la radice con due nodi fissi ('prefisso' e 'suffisso') e crescere ognuno in modo indipendente.