Technology fan Δημοσ. 19 Νοεμβρίου 2010 Δημοσ. 19 Νοεμβρίου 2010 Καλησπέρα, Έχω φτιάξει μία δομή δυαδικού δέντρου και θα ήθελα να εκτυπώνω στο command prompt το αντίστοιχο διάγραμμα χρησιμοποιώντας τις τιμές των κόμβων και (ανάποδους) καθέτους κτλπ. > πχ. 5 / \ 3 2 Να επισημάνω ότι κάθε κόμβος έχει left,right και parent. Υπάρχει κάποιος εύκολος τρόπος αποτύπωσης? Ή μήπως διαφοροποίηση κάποιας διάσχυσης, (inorder,postorder,preorder) Ευχαριστώ!
parsifal Δημοσ. 19 Νοεμβρίου 2010 Δημοσ. 19 Νοεμβρίου 2010 Νομίζω πως υπάρχει θεματάκι γεωμετρίας που δε λύνεται εύκολα με τους fixed χαρακτήρες που έχεις στη διάθεσή σου από τον ASCII table. Οσο πιο μεγάλο είναι το ύψος του δέντρου, τόσο πιο μεγάλο το άνοιγμα σε μοίρες των ακμών από το οποίο πρέπει να ξεκινήσεις και (άρα) η απόσταση μεταξύ των αδερφικών κόμβων, αλλιώς όσο κατεβαίνεις θα υπάρχει «συνωστισμός» μεταξύ των αδερφικών κόμβων. Πώς όμως θα παραστήσεις σε ASCII το «μεγαλύτερο άνοιγμα σε μοίρες»... ; Στο απλό δέντρο που έφερες ως παράδειγμα, αρκεί απόσταση 3 χαρακτήρων μεταξύ των αδερφών: > a / \ b c Εσύ έκανες λίγο πιο αραιές τις αποστάσεις: > 5 / \ 3 2 Ίσως έτσι να αρκούν και για μία ακόμη γραμμή με κόμβους, δεν το δοκίμασα. Τί γίνεται όμως σε πιο ψηλά δέντρα; Θα έχεις κάτι τέτοιο κοντά στη ρίζα; > a / \ b c Άσχημο, δε γίνεται δουλειά έτσι.
Technology fan Δημοσ. 19 Νοεμβρίου 2010 Μέλος Δημοσ. 19 Νοεμβρίου 2010 Δε με πειράζει οποιαδήποτε μορφή και να χει, πάνω απο 32 κόμβους δε πιστεύω να βάλω ουσιαστικά το θέλω για να δώ αν δουλεύουν οι αλλαγές που του κάνω με τον τρόπο που θέλω. Απλά να φαίνεται ποιος είναι παιδί ποιανού θέλω. Η ομορφιά στη συγκεκριμένη περίπτωση είναι περιττή!
parsifal Δημοσ. 19 Νοεμβρίου 2010 Δημοσ. 19 Νοεμβρίου 2010 Κάτι τέτοιο δηλαδή θα ήταν αποδεκτό; > 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 για κάθε διαφορετική σειρά του δέντρου, βάσει του μετρητή κάποιου βρόχου επανάληψης).
V.I.Smirnov Δημοσ. 19 Νοεμβρίου 2010 Δημοσ. 19 Νοεμβρίου 2010 Μην χρησιμοποιείς τα / και \ , είναι πολύ άβολα. Τα - και | ή κάποια παραλλαγή τους είναι προτιμότερα. Να, κάπως έτσι : > Α | B ----------------------------------------- C | | ----------------------- ---------------------- | | | | D E F G Είναι πολύ πιο εύκολο να ρυθμίσεις την εκτύπωση με αυτά αν ξέρεις το πλήθος των στοιχείων του δέντρου. Πέραν αυτού, η πιο γρήγορη μέθοδος για να δεις την δομή του δέντρου είναι χωρίς καν διάγραμμα : απλώς τυπώνεις τα siblings κάθε κόμβου (νομίζω λέγεται first child-next sibling representation) -
Technology fan Δημοσ. 19 Νοεμβρίου 2010 Μέλος Δημοσ. 19 Νοεμβρίου 2010 Μπορείς να μου περιγράψεις λίγο για δεδομένο size τι κάνω? Βέβαια εφόσον τα στοιχεία θα ναι λίγα δε με πειράζει και η πάνω μορφοποίηση.. Το πρόβλημα είναι οτι δεν έχω πρόσβαση στο sibling έλεγα να τροποποιήσω την level-order-traverse
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.