Ho una domanda teorica su Balanced BST
.Albero di ricerca binaria perfettamente bilanciato
Mi piacerebbe costruire Perfect Balanced Tree
che ha i nodi 2^k - 1
, da un normale unbalanced BST
. La soluzione più semplice a cui riesco a pensare è quella di utilizzare uno Array/Linked list
ordinato e dividere ricorsivamente l'array in array secondari e creare Perfect Balanced BST
da esso.
Tuttavia, in caso di dimensioni Tree estremamente grandi, sarà necessario creare un Array/List
nelle stesse dimensioni in modo che questo metodo consumerà una grande quantità di memoria.
Un'altra opzione è utilizzare le funzioni di rotazione AVL
, inserire elemento per elemento e bilanciare l'albero con le rotazioni in base al fattore di equilibrio dell'albero: tre altezze dei subalberi sinistro e destro.
Le mie domande sono, ho ragione riguardo alle mie ipotesi? C'è un altro modo per creare un perfetto BST
da squilibrato BST
?
Alcune funzioni di rotazione hanno perfettamente senso se si dispone di un albero grande e si desidera trasformare l'albero senza modificare gran parte della struttura esistente. - Il risultato deve essere perfettamente bilanciato? Qual è lo sfondo della domanda? – michas
Sì, deve essere perfettamente bilanciato. Fa parte di un progetto accademico. Cosa intendi per "alcune funzioni di rotazione"? Per quanto ne so ci sono quattro funzioni di rotazione che sono abbastanza facili da implementare. – OlejkaKL
Diversi tipi di alberi usano modi di rotazione leggermente diversi. Ad esempio confrontare alberi AVL e rosso-nero. – michas