Esiste qualche algoritmo per la visualizzazione della struttura dati ad albero? Ho provato su Google, ma non ho trovato nessuno. Sono abbastanza sicuro che ci debba essere un algoritmo per questo compito non così semplice. O qualcuno ha qualche idea?Algoritmo di visualizzazione ad albero
risposta
Presupposto: si desidera che ciascun nodo sia visualizzato in modo tale che sia centrato sopra i nodi figlio.
Per ottenere ciò, calcolare la larghezza di ciascun nodo, che definisco come la quantità di spazio orizzontale richiesta per visualizzare l'intera sottostruttura di questo nodo, in modo che non si sovrapponga con i suoi sottoalberi dei fratelli di sinistra o di destra.
Questo porta a:
width = 1 + sum(widths of children's nodes)
Quindi, fare un attraversamento in profondità attraverso l'albero per calcolare la larghezza di ogni nodo. Per visualizzare, esegui una traversata in ampiezza per disegnare l'albero livello per livello.
Questa è la vaga idea di come procedere. Potresti voler modificare il calcolo della larghezza in base ai dettagli di come desideri rendere l'albero.
È possibile utilizzare il linguaggio DOT con graphviz ad esempio.
Tree-mapping è probabilmente quello che stai cercando. Graphviz è utile per visualizzare strutture grafiche non specializzate per strutture ad albero. Non sono riuscito a ritrovarlo ma ricordo di aver letto in un articolo scientifico che le treemaps (penso che i voronoi) siano ottimali per rappresentare strutture ad albero, per quanto riguarda il luogo che consumano e l'area può essere usata per rappresentare alcune unità (come la dimensione dei byte per esempio).
Here sono alcune alternative.
Here è una buona lista di articoli e altre informazioni sull'argomento.
È inoltre possibile stampare l'albero da sinistra a destra, ovvero radice all'estrema sinistra, il primo livello a destra e così via. Troverete l'albero stampato con ogni livello sulla propria 'colonna'. L'algoritmo è un po 'come questo:
print(node, spaces):
if node has left child:
print(left_child, spaces + ' ')
print spaces + node + '\n'
if node has right child:
print(right_child, spaces + ' ')
Questo algoritmo stamperà un nodo albero per riga. Ogni livello dell'albero sarà rientrato a destra da alcuni spazi. Questo algoritmo stamperà gli articoli in ordine crescente, ma l'ordine decrescente può essere ottenuto elaborando prima il bambino giusto.
- 1. Alternative visualizzazione ad albero
- 2. Algoritmo di corrispondenza albero?
- 3. Visualizzazione ad albero di una directory/cartella in Windows?
- 4. Esiste una struttura ad albero o un algoritmo per mescolare i livelli di un albero?
- 5. Visualizzazione ad albero WPF, come modificare il rientro
- 6. Visualizzazione albero con Java
- 7. Struttura ad albero di Wordnet
- 8. Trasferimento ad albero binario
- 9. Come implementare la visualizzazione ad albero ad alte prestazioni in SQL Server 2005
- 10. Algoritmo ad albero intervallo che supporta la fusione di intervalli senza sovrapposizione
- 11. Come generare una vista ad albero da questo set di risultati basato su Algoritmo dell'albero trasversale?
- 12. Programmazione genetica ad albero binario
- 13. struttura ad albero graphviz complicata
- 14. Generazione di una visualizzazione albero in java
- 15. Visualizzazione di una gerarchia (albero) utilizzando knockoutjs
- 16. Ricerca di un controllo di visualizzazione ad albero del grafico a oggetti per WPF
- 17. Serializzazione/derializzazione di una struttura ad albero
- 18. MySQL - Recupero di una struttura ad albero
- 19. stringa ad albero di sintassi astratto
- 20. Algoritmo per la ricerca di simmetrie di un albero
- 21. Eventuali suggerimenti dell'algoritmo di ricerca ad albero paralleli distribuiti?
- 22. Come si evidenzia una voce di visualizzazione ad albero con un colore?
- 23. Come la mappa ad albero utilizza l'algoritmo albero nero rosso
- 24. Intervalli massimi non sovrapposti in un albero ad intervalli
- 25. Come creare una vista ad albero in Android?
- 26. Visualizzazione albero decisionale in scikit-learn
- 27. Creazione di una visualizzazione di albero in modo ricorsivo
- 28. C# WinForms evidenziate treenode quando la visualizzazione ad albero non ha lo stato attivo
- 29. È disponibile una visualizzazione ad albero delle chiamate per il profiler jvisualvm o NetBeans?
- 30. Python OpenCV Gerarchia ad albero Contour
Stai cercando qualcosa come Graphviz? http://www.graphviz.org/ –
Sei sicuro di cercare un algoritmo o un servizio che lo visualizzi per te? – Duniyadnd
Devo visualizzare albero nel mio progetto quindi ho bisogno dell'algoritmo. – MrProper