Supponiamo di avere un albero binario. La struttura del nodo dell'albero è come
struct node
{
int val ;
struct node *left , *right ;
}
Ora dobbiamo ordinare l'albero in ordine di livello. Ad esempio, supponiamo di avere un albero originale come questo
root = 6
root->left = 1
root->right = 9
root->left->left = 8
root->right->right = 2
Quindi, dopo aver applicato l'ordinamento per livello, il nostro albero sarà
root = 1
root->left = 2
root->right = 6
root->left->left = 8
root->right->right = 9
Un modo per risolvere questo problema è semplicemente prendere tutti i valori in una matrice e applicare uno qualsiasi dell'algoritmo di ordinamento standard e quindi rimettere i valori nella struttura ad albero in modo trasversale. Questa soluzione non è efficiente in termini di spazio e tempo entrambi.
Quale algoritmo posso utilizzare per ridurre le operazioni e l'utilizzo della memoria dal mio piano proposto? Esiste un algoritmo più efficiente per farlo senza l'uso di un array ordinato?
Ordinamento dell'ordine di livello: L'ordinamento a livello di livello significa che se esegui l'attraversamento di un ordine di livello dell'albero, dovresti ottenere una sequenza ordinata non decrescente.
Vincolo:
La forma dell'albero non dovrebbe alterare quella condizione se nell'albero originale lasciato figlio della radice non ha figli giusti (come nel mio esempio) e dopo l'ordinamento, non dovrebbe avere figli giusti.