ΕΠΙΣΗΜΑΙΝΕΤΑΙ ΟΤΙ ΑΥΤΟ ΕΙΝΑΙ ΕΡΓΑΣΙΑ! -> Δεν ψάχνω για άμεση παραδείγματα κώδικα, αλλά μάλλον κάποια ήπια μασάζ της συλλογιστικής μου ...
Μου ζητήθηκε να γράψω μια λειτουργία που αφαιρεί τη ρίζα ενός δυαδικού δέντρου αναζήτησης κάνοντας τρία πράγματα: 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 προς τα δεξιά. Ευχαριστώ.













