Advertisement
Neveles

Untitled

Mar 15th, 2020
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1.     void deleteKey(Node* toDelete)
  2.     {
  3.         Node *x, *y;
  4.         // спусков влево-вправо
  5.         if (toDelete == NULL)
  6.         {
  7.             return;
  8.         }
  9.         if (toDelete->left_ == NULL || toDelete->right_ == NULL)
  10.         {
  11.             // Хотя бы одно из поддеревьев отсутствует
  12.             y = toDelete;
  13.         }
  14.         else
  15.         {
  16.             // Есть оба поддерева
  17.             y = toDelete->right_;
  18.             while (y->left_ != NULL) y = y->left_;
  19.         }
  20.  
  21.         // Обрабатываем случай, когда у узла "y" только один потомок
  22.         if (y->left_ != NULL)
  23.         {
  24.             x = y->left_;
  25.         }
  26.         else
  27.         {
  28.             x = y->right_;
  29.         }
  30.  
  31.         // Исключаем узел "y" из "родительской" цепочки
  32.         if (x != NULL) x->p_ = y->p_;
  33.         if (y->p_ != NULL)
  34.         {
  35.             if (y == y->p_->left_)
  36.             {
  37.                 y->p_->left_ = x;
  38.             }
  39.             else
  40.             {
  41.                 y->p_->right_ = x;
  42.             }
  43.         }
  44.         else root_ = x;
  45.         if (y != toDelete)
  46.         {
  47.             toDelete->key_ = y->key_;
  48.         }
  49.         delete y;
  50.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement