που ασχολούνται με αντίγραφα σε ένα BST

ψήφοι
2

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

Δημοσιεύθηκε 10/10/2009 στις 08:51
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
2

Θα μπορούσατε να κάνετε τους κόμβους του δυαδικού δένδρου αναζήτησης σε συνδεδεμένες λίστες.

class Data implements Comparable<Data>
{
   // These are the data elements in your binary search tree
}

class TreeNode
{
  TreeNode left; // elements less than current node, or null
  TreeNode right; // elements greater than current node, or null
  List<Data> items = new LinkedList<Data>();    
}

Εδώ, treeNode.itemsείναι πάντα μια μη κενή λίστα, έτσι ώστε item1.compareTo(item2) == 0για κάθε item1και item2σε treeNode.items.

Για να εισάγετε ένα αντίγραφο των στοιχείων, θα βρείτε το σχετικό TreeNodeαντικείμενο και να προσθέσετε ένα νέο στοιχείο στο items.

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

Απαντήθηκε 10/10/2009 στις 13:17
πηγή χρήστη

ψήφοι
3

Εφ 'όσον δεν είναι μια αυτο εξισορρόπησης BST, δεν βλέπω κάποιο πρόβλημα με τη θέση ίση κόμβους είτε στην αριστερή ή δεξιά του κόμβου που είναι ίσος με αυτούς.

Επεξεργασία (μετά την παρατήρηση simonn του):

Αν η «διπλούν κόμβο» στην ερώτηση έχει ήδη 2 παιδιά, τότε απλά εισάγετε το «νέο κόμβο διπλούν» προς τα αριστερά και αφήστε το αριστερό παιδί του «παλιού αντιγράφου του κόμβου» να γίνει το αριστερό παιδί του «νέου αντιγράφου του κόμβου».

Επιτρέψτε μου να διευκρινίσω με ένα παράδειγμα. Το δέντρο πριν τοποθετήσετε ένα αντίγραφο:

    4'
   / \
  2   5
 / \
1   3

Και τώρα το στοιχείο 4''εισάγεται:

      4'
     / \
    4'' 5
   /
  2   
 / \
1   3

Εφ 'όσον το δέντρο δεν είναι αυτο εξισορρόπηση, θα πρέπει να είναι εντάξει.

Απαντήθηκε 10/10/2009 στις 13:37
πηγή χρήστη

ψήφοι
0

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

Απαντήθηκε 21/06/2012 στις 19:26
πηγή χρήστη

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