Η δημιουργία ενός BST από μια σειρά

ψήφοι
1

Θα πρέπει να δημιουργήσετε ένα δυαδικό δέντρο αναζήτησης στο παρακάτω (παράξενο) τρόπο:

Είμαι δοθεί μια σειρά (Α [n]). A [1] γίνεται η ρίζα του δένδρου.

  • Στη συνέχεια, εισάγω μία [1] + A [2] προς τα αριστερά υποδένδρο (subtree1, χρησιμοποιείται παρακάτω) της ρίζας και επίσης εισάγετε ένα [1] -Α [2] προς τα δεξιά υποδένδρο (subtree2) της ρίζας.

  • Εισάγω μία [1] + A [2] + Ενα [3] προς τα αριστερά υποδένδρο του subtree1 (subtree3) και Α [1] + Α [2] -Α [3] προς τα δεξιά υποδένδρο του subtree1 (subtree4).

  • Στη συνέχεια, εισάγω μία [1] -Α [2] + A [3] προς τα αριστερά υποδένδρο του subtree2 (subtree5) και Α [1] -Α [2] -Α [3] προς τα δεξιά υποδένδρο του subtree2 (subtree6 ).

  • Επαναλαμβάνω για subtree3, subtree4, subtree5, subtree6 μέχρι να φτάσετε στο τέλος του πίνακα.

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

Κατανοώ ότι πρέπει να χρησιμοποιήσει την έννοια της αναδρομής, αλλά με διαφορετική διατύπωση. Πληκτρολογώντας το πρόβλημά μου εδώ και προσπαθούμε να το εξηγήσω σε κάποιον άλλο, εκτός από το μυαλό μου, πραγματικά με έκανε να σχηματίσουν με έναν τρόπο που μου έδωσε κάποιες ιδέες για να δοκιμάσετε, αλλά μπορώ να δω το πρόβλημα που ασχολούμαι με το να είναι ένα συνηθισμένο πρόβλημα οπότε ίσως θα μπορούσε να δώσει με ορισμένες συμβουλές για το πώς να χρησιμοποιήσετε αναδρομή για την κατασκευή του δέντρου.

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

Δημοσιεύθηκε 24/03/2011 στις 02:20
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Ο τρόπος για να γίνει αναδρομή είναι πάντα να υποθέσουμε ότι έχετε ήδη μια λειτουργία εργασίας στο χέρι. Ας δούμε λοιπόν [χρησιμοποιώντας Java σύνταξη] ...

Tree buildTree(int currentSum, int[] array, int index, boolean sign);

Ας υποθέσουμε ότι λειτουργεί. Στη συνέχεια, θα do u πρέπει να κάνετε για να οικοδομήσουμε ένα δέντρο στο δείκτη i;

// current value to look at at this level
int curValue = array[index];
// depending on sign, it may be negative
if (!sign) { 
  curValue *= -1;
}
// add it to the running total
int nodeValue = currentSum + curValue;
Node nd = new Node(nodeValue);

nd.left = buildTree(nodeValue, array, index + 1, true);
nd.right = buildTree(nodeValue, array, index + 1, false);

Αυτό είναι βασικά. Θα πρέπει να ασχοληθούν με τις περιπτώσεις ακμής: δείκτης = array.length, τη δημιουργία του πρώτου πολύ κόμβο, και τα παρόμοια

Απαντήθηκε 24/03/2011 στις 02:27
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more