DrRacket Διαγραφή ρίζα ενός Binary Search Tree

ψήφοι
1

ΕΠΙΣΗΜΑΙΝΕΤΑΙ ΟΤΙ ΑΥΤΟ ΕΙΝΑΙ ΕΡΓΑΣΙΑ! -> Δεν ψάχνω για άμεση παραδείγματα κώδικα, αλλά μάλλον κάποια ήπια μασάζ της συλλογιστικής μου ...

Μου ζητήθηκε να γράψω μια λειτουργία που αφαιρεί τη ρίζα ενός δυαδικού δέντρου αναζήτησης κάνοντας τρία πράγματα: i) περιστρέφοντας το δέντρο προς τα δεξιά ii) την αφαίρεση της ρίζας του δικαιώματος υποδένδρο (Ποια ήταν η αρχική ρίζα BST) iii) ανοικοδόμηση η BST με την νέα ρίζα (το οποίο ήταν το αριστερό του αρχικού δένδρου) και τις κατάλληλες αναδιατάξεις των παιδιών αυτού του κόμβου ... Εδώ είναι αυτό που έχω:

    (define (rm-root my-bst)
      (list (key (rot-r my-bst)) 
            (left (rot-r my-bst)) 
            (append (right (right (rot-r my-bst))) 
                    (left (right (rot-r my-bst))))))

Ποια είναι μεγάλη, αναμένουμε για το ότι δεν ξαναχτίσουν το δέντρο με τα παιδιά του κόμβου που «προωθούνται» στον κόμβο ρίζα. Μπορεί κάποιος να με βοηθήσει να σκεφτείτε για το πώς θα πρέπει να πάει για την εφαρμογή της εν λόγω; Θα ήθελα να αναφέρω ότι έχουμε ορίσει Bst ως λίστες και ότι η λειτουργία σήψη-r περιστρέφει το BST προς τα δεξιά. Ευχαριστώ.

Δημοσιεύθηκε 12/11/2011 στις 01:07
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Λοιπόν, δεν είμαι σίγουρος ότι αυτό θα είναι χρήσιμο 12 ημέρες μετά το θέμα ζητήθηκε, αλλά εδώ πηγαίνει.

Για να είμαι σαφής, υποθέτω ότι η δομή των δεδομένων είναι της μορφής (πλήκτρο λίστα αριστερά δεξιά), όπου αριστερά και δεξιά είναι, επίσης, τα δέντρα (ή άδειο, αλλά αυτό είναι άσχετο με αυτό). Αν αυτό δεν είναι η περίπτωση, θα έπρεπε να διευκρινιστεί αυτό.

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

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

Απαντήθηκε 23/11/2011 στις 07:33
πηγή χρήστη

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