Προς το περιεχόμενο

Διάγραμμα δέντρου σε command prompt


Technology fan

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

Έχω φτιάξει μία δομή δυαδικού δέντρου και θα ήθελα να εκτυπώνω στο command prompt το αντίστοιχο διάγραμμα χρησιμοποιώντας τις τιμές των κόμβων και (ανάποδους) καθέτους κτλπ.

>      πχ.
                    5
                  /   \
                3       2

Να επισημάνω ότι κάθε κόμβος έχει left,right και parent.

Υπάρχει κάποιος εύκολος τρόπος αποτύπωσης? Ή μήπως διαφοροποίηση κάποιας διάσχυσης, (inorder,postorder,preorder)

 

Ευχαριστώ!

Δημοσ.

Νομίζω πως υπάρχει θεματάκι γεωμετρίας που δε λύνεται εύκολα με τους fixed χαρακτήρες που έχεις στη διάθεσή σου από τον ASCII table. Οσο πιο μεγάλο είναι το ύψος του δέντρου, τόσο πιο μεγάλο το άνοιγμα σε μοίρες των ακμών από το οποίο πρέπει να ξεκινήσεις και (άρα) η απόσταση μεταξύ των αδερφικών κόμβων, αλλιώς όσο κατεβαίνεις θα υπάρχει «συνωστισμός» μεταξύ των αδερφικών κόμβων. Πώς όμως θα παραστήσεις σε ASCII το «μεγαλύτερο άνοιγμα σε μοίρες»... ;

 

Στο απλό δέντρο που έφερες ως παράδειγμα, αρκεί απόσταση 3 χαρακτήρων μεταξύ των αδερφών:

>
 a
/ \
b   c

 

Εσύ έκανες λίγο πιο αραιές τις αποστάσεις:

>
   5
 /   \
3       2

Ίσως έτσι να αρκούν και για μία ακόμη γραμμή με κόμβους, δεν το δοκίμασα.

 

Τί γίνεται όμως σε πιο ψηλά δέντρα; Θα έχεις κάτι τέτοιο κοντά στη ρίζα;

>
           a
     /           \
b                       c

Άσχημο, δε γίνεται δουλειά έτσι.

Δημοσ.

Δε με πειράζει οποιαδήποτε μορφή και να χει, πάνω απο 32 κόμβους δε πιστεύω να βάλω ουσιαστικά το θέλω για να δώ αν δουλεύουν οι αλλαγές που του κάνω με τον τρόπο που θέλω.

Απλά να φαίνεται ποιος είναι παιδί ποιανού θέλω.

Η ομορφιά στη συγκεκριμένη περίπτωση είναι περιττή!

Δημοσ.

Κάτι τέτοιο δηλαδή θα ήταν αποδεκτό;

 

>
                                  01
                  /                                \
                02                                  03
         /              \                    /              \
       04                05                06                07
    /     \           /     \           /     \           /     \
  08       09       10       11       12       13       14       15
 /  \     /  \     /  \     /  \     /  \     /  \     /  \     /  \
16    17 18    19 20    21 22    23 24    25 26    27 28    29 30    31

 

Αφού δεν αναμένεις μεγάλο ύψος δέντρου, μπορείς απλά να ορίσεις στον κώδικά σου fixed αποστάσεις (αντί να τις υπολογίζεις programmatically για κάθε διαφορετική σειρά του δέντρου, βάσει του μετρητή κάποιου βρόχου επανάληψης).

Δημοσ.

Μην χρησιμοποιείς τα / και \ , είναι πολύ άβολα.

Τα - και | ή κάποια παραλλαγή τους είναι προτιμότερα.

Να, κάπως έτσι :

 

>
                                       Α
                                       |
                B ----------------------------------------- C
                |                                           |
     -----------------------                      ----------------------
     |                     |                      |                    |
     D                     E                      F                    G 

 

 

Είναι πολύ πιο εύκολο να ρυθμίσεις την εκτύπωση με αυτά αν ξέρεις το πλήθος των στοιχείων του δέντρου.

 

Πέραν αυτού, η πιο γρήγορη μέθοδος για να δεις την δομή του δέντρου είναι χωρίς καν διάγραμμα :

απλώς τυπώνεις τα siblings κάθε κόμβου (νομίζω λέγεται first child-next sibling representation)

 

-

Δημοσ.

Μπορείς να μου περιγράψεις λίγο για δεδομένο size τι κάνω?

Βέβαια εφόσον τα στοιχεία θα ναι λίγα δε με πειράζει και η πάνω μορφοποίηση..

 

Το πρόβλημα είναι οτι δεν έχω πρόσβαση στο sibling έλεγα να τροποποιήσω την level-order-traverse

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...