nikolio Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 Καλησπέρα! Θέλω να δημιουργήσω μια μέθοδο Inorder(int *s) η οποία θα επιστρέφει στο array s τα στοιχεία του δένδρου μου σε inorder διάταξη.. Το πρόβλημα μου είναι ότι εφόσον δεν περνάω ως παράμετρο την ρίζα του δένδρου μου ή γενικά κάποιο κόμβο, πώς θα λειτουργήσει η αναδρομή που χρησιμοποιεί στην απλή της υλοποίηση η inorder? Ελπίζω να μην σας μπέρδεψα..
parsifal Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 Είναι θεμελιώδης απαίτηση η μέθοδος να παίρνει μοναδικό όρισμα; Εννοώ, σου έχει δοθεί τέτοια απαράβατη οδηγία που να αφορά την υλοποίηση; Γιατί ενστικτωδώς, η απάντησή μου θα ήταν ότι «Δε γίνεται», αφού κάθε νέα αναδρομική κλήση της μεθόδου θα πρέπει να έχει διαφορετικό starting point. Κάπου θα πρέπει να γίνεται αυτή η διαφοροποίηση. Αν όχι στο input που περνάς στη μέθοδο, τότε που... ;
nikolio Δημοσ. 21 Δεκεμβρίου 2010 Μέλος Δημοσ. 21 Δεκεμβρίου 2010 Στην εκφώνηση που μου δίνεται έχει σαν όρισμα μόνο το array.. Πιστεύεις δηλαδή ότι δεν γίνεται ε? Και εγώ προσπαθώ να βρω μια λύση αλλά δεν μπορώ να σκεφτώ κάτι.. Θα δοκιμάσω να στείλω ένα mail στον καθηγητή..
parsifal Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 Αν χρησιμοποιηθούν μία ή περισσότερες βοηθητικές global και/ή static μεταβλητές, πιθανότατα γίνεται. Αλλά, για τις global θα το έχεις ακούσει το τροπάρι, να μην το επαναλαμβάνω.
nikolio Δημοσ. 21 Δεκεμβρίου 2010 Μέλος Δημοσ. 21 Δεκεμβρίου 2010 Θα δοκιμάσω να χρησιμοποιήσω μια άλλη συνάρτηση για να κάνει την αναδρομή, την οποία θα χρησιμοποιήσω μέσα στην inorder που μου ζητάει.. Δεν θέλω να χρησιμοποιήσω global μεταβλητές..νομίζω θα είναι μείον..
parsifal Δημοσ. 21 Δεκεμβρίου 2010 Δημοσ. 21 Δεκεμβρίου 2010 Θα δοκιμάσω να χρησιμοποιήσω μια άλλη συνάρτηση για να κάνει την αναδρομή, την οποία θα χρησιμοποιήσω μέσα στην inorder που μου ζητάει.. Δεν θέλω να χρησιμοποιήσω global μεταβλητές..νομίζω θα είναι μείον.. Ακόμη κι έτσι, δε νομίζω ότι θα μπορέσεις να αποφύγεις την χρήση μίας global έστω. Πρέπει κάπως να περάσεις στη μέθοδο "Inorder" τη ρίζα του δέντρου. Σκέψου λίγο το εξής, πολύ απλό, υποθετικό παράδειγμα: Έστω ότι στο πρόγραμμά σου δημιουργείς δύο δέντρα, εντελώς άσχετα μεταξύ τους. Καλώντας τη μέθοδο, πώς θα ελέγξεις σε ποιο από τα δύο δέντρα αυτή θα εργαστεί... ;
nikolio Δημοσ. 22 Δεκεμβρίου 2010 Μέλος Δημοσ. 22 Δεκεμβρίου 2010 Θα έχω μία κλάση AVLTree και θα δημιουργώ 2 αντικείμενα αυτής της κλάσης.. Κάθε αντικείμενο θα γνωρίζει ποια είναι η ρίζα του.. Δεν θα λειτουργήσει?
parsifal Δημοσ. 22 Δεκεμβρίου 2010 Δημοσ. 22 Δεκεμβρίου 2010 Έχεις δίκιο, αφηρημάδα μου. Έγραφα κι εγώ σαν τον χάνο «μέθοδος» αλλά σκεφτόμουν «συνάρτηση» και C!
nikolio Δημοσ. 22 Δεκεμβρίου 2010 Μέλος Δημοσ. 22 Δεκεμβρίου 2010 Ε και εγώ δεν διευκρίνισα ότι είναι σε C++, οπότε δικαιολογήσε.. Θα το δοκιμάσω λοιπόν και ελπίζω να δουλέψει.. Ευχαριστώ πολύ για τον χρόνο και την βοήθειά σου!!!
Technology fan Δημοσ. 22 Δεκεμβρίου 2010 Δημοσ. 22 Δεκεμβρίου 2010 Καλησπέρα! Θέλω να δημιουργήσω μια μέθοδο Inorder(int *s) η οποία θα επιστρέφει στο array s τα στοιχεία του δένδρου μου σε inorder διάταξη.. Το πρόβλημα μου είναι ότι εφόσον δεν περνάω ως παράμετρο την ρίζα του δένδρου μου ή γενικά κάποιο κόμβο, πώς θα λειτουργήσει η αναδρομή που χρησιμοποιεί στην απλή της υλοποίηση η inorder? Ελπίζω να μην σας μπέρδεψα.. Πρέπει να φτιάξεις μία κανονική inorder2 όπου θα γίνεται η διάσχυση και απλά στην inorder (int *s ){ inorder2(root); //κλήση της κανονικής inorder με όρισμα την ρίζα } εξάλλου το είπε ο Παπαδόπουλος στο μάθημα
MitsakosGR Δημοσ. 23 Δεκεμβρίου 2010 Δημοσ. 23 Δεκεμβρίου 2010 Καλησπέρα! Θέλω να δημιουργήσω μια μέθοδο Inorder(int *s) η οποία θα επιστρέφει στο array s τα στοιχεία του δένδρου μου σε inorder διάταξη.. Το πρόβλημα μου είναι ότι εφόσον δεν περνάω ως παράμετρο την ρίζα του δένδρου μου ή γενικά κάποιο κόμβο, πώς θα λειτουργήσει η αναδρομή που χρησιμοποιεί στην απλή της υλοποίηση η inorder? Ελπίζω να μην σας μπέρδεψα.. Γιατί δεν περνάς της ρίζα του δέντρου στο int *s ; Η ρίζα ξεκινάει από μία θέση μνήμης. Πέρνα την σαν παράμετρο μέσα στην int *s και μέσα στην function αντικατέστησε το *s με την inorder διάταξη.
Timonkaipumpa Δημοσ. 23 Δεκεμβρίου 2010 Δημοσ. 23 Δεκεμβρίου 2010 Θα έχω μία κλάση AVLTree και θα δημιουργώ 2 αντικείμενα αυτής της κλάσης.. Κάθε αντικείμενο θα γνωρίζει ποια είναι η ρίζα του.. Δεν θα λειτουργήσει? Εφόσον είναι δέντρο σου και εφόσον έχεις αυτό τον περιορισμό με το όρισμα της inorder τότε βάλε στον κόμβο του δέντρου σου ένα δείκτη και προς τον γονέα. Μία getter μέθοδο και εάν είναι null η επιστροφή είναι ρίζα. Θα πρέπει όμως να φροντίσεις την αρχικοποίηση της ρίζας με null στον συγκεκριμένο δείκτη.
nikolio Δημοσ. 23 Δεκεμβρίου 2010 Μέλος Δημοσ. 23 Δεκεμβρίου 2010 Ευχαριστώ πολύ για τις απαντήσεις!! Τελικά το έκανα με μία άλλη αναδρομική συνάρτηση την οποία καλούσα μέσα στην Inorder και δούλεψε κανονικά.. Πρέπει να φτιάξεις μία κανονική inorder2 όπου θα γίνεται η διάσχυση και απλά στην inorder (int *s ){ inorder2(root); //κλήση της κανονικής inorder με όρισμα την ρίζα } εξάλλου το είπε ο Παπαδόπουλος στο μάθημα Δεν θα ήμουν στο συγκεκριμένο μάθημα!!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.