Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <class K, class V>
- void AVLTree<K, V>::remove(Node*& subtree, const K& key)
- {
- if (subtree == NULL)
- return;
- if (key < subtree->key) {
- remove(subtree->left, key);
- rebalance(subtree);
- } else if (key > subtree->key) {
- remove(subtree->right, key);
- rebalance(subtree);
- } else {
- if (subtree->left == NULL && subtree->right == NULL) {
- /* no-child remove */
- // your code here
- delete subtree;
- subtree = NULL;
- } else if (subtree->left != NULL && subtree->right != NULL) {
- /* two-child remove */
- // your code here
- Node * iop = subtree->left;
- swap(iop, subtree);
- if (iop->left == NULL && iop->right == NULL) {
- delete iop;
- iop = NULL;
- }
- else{
- if(iop->right !=NULL){
- Node * right = iop->right;
- delete iop;
- iop = right;
- }
- else{
- Node* left = iop->left;
- delete iop;
- iop = left;
- }
- }
- rebalance(iop);
- } else {
- /* one-child remove */
- // your code here
- if(subtree->right !=NULL){
- Node * right = subtree->right;
- delete subtree;
- subtree = right;
- }
- else{
- Node* left = subtree->left;
- delete subtree;
- subtree = left;
- }
- }
- rebalance(subtree);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement