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

Inorder Traverse


nikolio

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

Δημοσ.

Καλησπέρα!

Θέλω να δημιουργήσω μια μέθοδο Inorder(int *s) η οποία θα επιστρέφει στο array s τα στοιχεία του δένδρου μου σε inorder διάταξη..

Το πρόβλημα μου είναι ότι εφόσον δεν περνάω ως παράμετρο την ρίζα του δένδρου μου ή γενικά κάποιο κόμβο, πώς θα λειτουργήσει η αναδρομή που χρησιμοποιεί στην απλή της υλοποίηση η inorder?

Ελπίζω να μην σας μπέρδεψα.. :rolleyes:

Δημοσ.

Είναι θεμελιώδης απαίτηση η μέθοδος να παίρνει μοναδικό όρισμα; Εννοώ, σου έχει δοθεί τέτοια απαράβατη οδηγία που να αφορά την υλοποίηση; Γιατί ενστικτωδώς, η απάντησή μου θα ήταν ότι «Δε γίνεται», αφού κάθε νέα αναδρομική κλήση της μεθόδου θα πρέπει να έχει διαφορετικό starting point. Κάπου θα πρέπει να γίνεται αυτή η διαφοροποίηση. Αν όχι στο input που περνάς στη μέθοδο, τότε που... ; :mellow:

Δημοσ.

Στην εκφώνηση που μου δίνεται έχει σαν όρισμα μόνο το array..

Πιστεύεις δηλαδή ότι δεν γίνεται ε?

Και εγώ προσπαθώ να βρω μια λύση αλλά δεν μπορώ να σκεφτώ κάτι..

Θα δοκιμάσω να στείλω ένα mail στον καθηγητή.. <_<

Δημοσ.

Αν χρησιμοποιηθούν μία ή περισσότερες βοηθητικές global και/ή static μεταβλητές, πιθανότατα γίνεται. Αλλά, για τις global θα το έχεις ακούσει το τροπάρι, να μην το επαναλαμβάνω. :P

Δημοσ.

Θα δοκιμάσω να χρησιμοποιήσω μια άλλη συνάρτηση για να κάνει την αναδρομή, την οποία θα χρησιμοποιήσω μέσα στην inorder που μου ζητάει..

Δεν θέλω να χρησιμοποιήσω global μεταβλητές..νομίζω θα είναι μείον.. :unsure:

Δημοσ.

Θα δοκιμάσω να χρησιμοποιήσω μια άλλη συνάρτηση για να κάνει την αναδρομή, την οποία θα χρησιμοποιήσω μέσα στην inorder που μου ζητάει..

Δεν θέλω να χρησιμοποιήσω global μεταβλητές..νομίζω θα είναι μείον.. :unsure:

Ακόμη κι έτσι, δε νομίζω ότι θα μπορέσεις να αποφύγεις την χρήση μίας global έστω. Πρέπει κάπως να περάσεις στη μέθοδο "Inorder" τη ρίζα του δέντρου.

 

Σκέψου λίγο το εξής, πολύ απλό, υποθετικό παράδειγμα: Έστω ότι στο πρόγραμμά σου δημιουργείς δύο δέντρα, εντελώς άσχετα μεταξύ τους. Καλώντας τη μέθοδο, πώς θα ελέγξεις σε ποιο από τα δύο δέντρα αυτή θα εργαστεί... ; ;)

Δημοσ.

Θα έχω μία κλάση AVLTree και θα δημιουργώ 2 αντικείμενα αυτής της κλάσης..

Κάθε αντικείμενο θα γνωρίζει ποια είναι η ρίζα του..

Δεν θα λειτουργήσει? :huh:

Δημοσ.

Ε και εγώ δεν διευκρίνισα ότι είναι σε C++, οπότε δικαιολογήσε.. :P

Θα το δοκιμάσω λοιπόν και ελπίζω να δουλέψει..

Ευχαριστώ πολύ για τον χρόνο και την βοήθειά σου!!! :D

Δημοσ.

Καλησπέρα!

Θέλω να δημιουργήσω μια μέθοδο Inorder(int *s) η οποία θα επιστρέφει στο array s τα στοιχεία του δένδρου μου σε inorder διάταξη..

Το πρόβλημα μου είναι ότι εφόσον δεν περνάω ως παράμετρο την ρίζα του δένδρου μου ή γενικά κάποιο κόμβο, πώς θα λειτουργήσει η αναδρομή που χρησιμοποιεί στην απλή της υλοποίηση η inorder?

Ελπίζω να μην σας μπέρδεψα.. :rolleyes:

 

Πρέπει να φτιάξεις μία κανονική inorder2 όπου θα γίνεται η διάσχυση και απλά στην inorder (int *s ){ inorder2(root); //κλήση της κανονικής inorder με όρισμα την ρίζα }

 

 

εξάλλου το είπε ο Παπαδόπουλος στο μάθημα :P

 

Δημοσ.

Καλησπέρα!

Θέλω να δημιουργήσω μια μέθοδο Inorder(int *s) η οποία θα επιστρέφει στο array s τα στοιχεία του δένδρου μου σε inorder διάταξη..

Το πρόβλημα μου είναι ότι εφόσον δεν περνάω ως παράμετρο την ρίζα του δένδρου μου ή γενικά κάποιο κόμβο, πώς θα λειτουργήσει η αναδρομή που χρησιμοποιεί στην απλή της υλοποίηση η inorder?

Ελπίζω να μην σας μπέρδεψα.. :rolleyes:

 

Γιατί δεν περνάς της ρίζα του δέντρου στο int *s ;

Η ρίζα ξεκινάει από μία θέση μνήμης. Πέρνα την σαν παράμετρο μέσα στην int *s και μέσα στην function αντικατέστησε το *s με την inorder διάταξη.

Δημοσ.

Θα έχω μία κλάση AVLTree και θα δημιουργώ 2 αντικείμενα αυτής της κλάσης..

Κάθε αντικείμενο θα γνωρίζει ποια είναι η ρίζα του..

Δεν θα λειτουργήσει? :huh:

 

 

Εφόσον είναι δέντρο σου και εφόσον έχεις αυτό τον περιορισμό με το όρισμα

της inorder τότε βάλε στον κόμβο του δέντρου σου ένα δείκτη και προς τον γονέα.

Μία getter μέθοδο και εάν είναι null η επιστροφή είναι ρίζα.

 

Θα πρέπει όμως να φροντίσεις την αρχικοποίηση της ρίζας με null στον συγκεκριμένο δείκτη.

Δημοσ.

Ευχαριστώ πολύ για τις απαντήσεις!! :D

Τελικά το έκανα με μία άλλη αναδρομική συνάρτηση την οποία καλούσα μέσα στην Inorder και δούλεψε κανονικά..

 

Πρέπει να φτιάξεις μία κανονική inorder2 όπου θα γίνεται η διάσχυση και απλά στην inorder (int *s ){ inorder2(root); //κλήση της κανονικής inorder με όρισμα την ρίζα }

 

 

εξάλλου το είπε ο Παπαδόπουλος στο μάθημα :P

 

 

 

Δεν θα ήμουν στο συγκεκριμένο μάθημα!!! :P

 

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

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

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