Dove collocare i dati per la struttura ad albero che richiede ogni nodo?

1

Ho una struttura quad-tree in cui ogni nodo ha alcuni dei propri dati, ma ci sono anche dati che si applicano all'intero albero.

Spiegherò la mia attuale soluzione e mi farebbe piacere ricevere feedback sul fatto che questa sia la soluzione migliore o se esistano soluzioni migliori.

Ho due classi:

  • Uno per il nodo
  • Uno per l'albero

La classe tree contiene un puntatore al nodo radice e i dati rilevanti per quell'albero. I nodi dell'albero hanno bisogno di accedere a quei dati, quindi una opzione sarebbe quella di avere la classe nodo include un membro dati che è un puntatore all'oggetto tree, e quindi invocare i suoi metodi accessor per ottenere i dati.

Ciò aumenterebbe il lato di ogni nodo, tuttavia, così ho deciso di avere un singolo puntatore statico per la classe del nodo. Quando un oggetto tree vuole fare qualcosa a tutti i nodi (la maggior parte degli algoritmi sono ricorsivi a partire dalla radice), prima imposta il puntatore statico in modo che punti ai suoi dati dell'albero (che inserisco in una struct) e poi invoca il static puntatore a puntare ai suoi dati.

Ecco alcuni pseudo-codice:

struct TreeData {
    // data relevant to tree as a whole
};

class Tree {
public:
    void algorithm() {
        root.set_data(&data);
        root.algorithm();
    };

private:
    Node root;
    TreeData data;
};

class Root {
public:
    static void set_data(TreeData * data) {
        tree_data = data;
    }

    void algorithm() {
        // code that uses tree_data
    }

private:
    static TreeData * tree_data;
};

Volevo evitare che ogni nodo aumentasse di dimensioni, ma possono essere istanziati più alberi alla volta, quindi non può essere solo un dato statico per la classe del nodo.

Quindi dove devo inserire i dati per la struttura ad albero che richiede ogni nodo?

    
posta master_latch 04.01.2015 - 23:10
fonte

1 risposta

2

La tua attuale soluzione ha un lato negativo in quanto non è thread-safe. Definirei sicuramente la riprogettazione in modo da poter avere più operazioni sugli alberi preformate in parallelo.

Supponendo che i nodi siano puramente interni alla struttura ad albero e sempre richiamati tramite l'albero, considererei semplicemente che il loro albero dei proprietari sia passato come parametro quando chiami qualcuno dei loro metodi che hanno bisogno di accedere a questi dati.

    
risposta data 04.01.2015 - 23:20
fonte

Leggi altre domande sui tag