Rappresentazione 1 - Albero a più percorsi
typedef struct multiWalkTreeNode{
struct multiWalkTreeNode * parent;
void *item;
struct multiWalkTreeNode **childPointer;
}Node;
typedef struct multiWalkTree{
Node *root;
int size; /*Number of nodes in the tree*/
}Tree;
Vista grafica:
Rappresentazione2-AlberoLCRS
typedefstructSiblingTreeNode{structSiblingTreeNode*parent;void*item;structSiblingTreeNode*firstChild;structSiblingTreeNode*nextSibling;}Node;typedefstructLCRSTree{Node*root;intsize;}Tree;
Vistagrafica:
Rappresentazione3-Strutturaadalbero(Comedenominarequestoalbero?)
typedefstructDListNode{intitem;structDListNode*next;structDListNode*prev;}DListNode;typedefstructDList{//CircularDListNode*head;intsize;}List;typedefstructtreeNode{structtreeNode*parent;void*item;List*childList;/*Sentinelnodeiscreatedoninitialconstructionofa"List" */
}Node;
typedef struct treeUsingList{
Node *root;
int size;
}Tree;
Viene introdotto il puntatore padre per eseguire DFS senza ricorsione o stack esplicito.
Conferma la correttezza della rappresentazione.
Domanda:
1) Abbiamo un nome per albero in Representation 3 ?
2) Per le operazioni di inserimento / cancellazione / ricerca, quale rappresentazione si comporta meglio?
3) Ci sono altre rappresentazioni per l'albero radicato, che possono migliorare le prestazioni?