Sto implementando una struttura dati ad albero in c # (in gran parte su Implementazione generica di Dan Vanderboom ). Sto considerando un approccio sulla gestione di una proprietà Count che Dan non implementa.
Il modo ovvio e facile sarebbe usare una chiamata ricorsiva che attraversa felicemente l'albero aggiungendo nodi (o iterativamente attraversando l'albero con una coda e contando i nodi se preferisci). Sembra solo costoso. (Potrei anche voler caricare pigro alcuni dei miei nodi lungo la strada).
Potrei mantenere un conteggio nel nodo radice. Tutti i bambini dovrebbero attraversare fino a e / o mantenere un riferimento alla radice e aggiornare una proprietà di conteggio impostabile internamente sulle modifiche. Ciò spingerebbe il problema di iterazione quando mai voglio interrompere un ramo o cancellare tutti i bambini sotto un determinato nodo. Generalmente meno costoso, e mette il sollevamento pesante quello che penso sarà meno frequentemente chiamato funzioni.
Sembra una piccola forza bruta, e questo di solito significa casi eccezionali a cui non avevo ancora pensato, o bug, se preferisci.
Qualcuno ha un esempio di un'implementazione che mantiene un conteggio per una struttura Albero sbilanciato e / o non binario invece di contare al volo? Non preoccuparti del carico pigro o della lingua. Sono sicuro di poter adattare l'esempio per soddisfare le mie esigenze specifiche.
EDIT: sono curioso di un esempio, piuttosto che di istruzioni o discussioni. So che non è tecnicamente difficile ...