Удаление из сбалансированного дерева

  1. Задание на 4
    1. function avlDeleteSimple(var root : PTreeNode; n : PTreeNode) : PTreeNode;
      1. root -- корень сбалансированного дерева
      2. n -- вершина, у которой не более одного сына
      3. удалить вершину n
        1. исправить баланс в вершинах выше n
      4. вернуть самую нижнюю вершину, в которой значение баланса стало по модулю равно 2
        1. или nil, если баланс всех вершин остался допустимым
  2. Задание на 5
    1. procedure avlDelete(var root : PTreeNode; n : PTreeNode);
      1. root -- корень сбалансированного дерева
      2. n -- произвольная вершина этого дерева
      3. удалить n
        1. если после удаления баланс нарушился, выполнить балансировку
          1. после этого может нарушиться баланс родителя той вершины, которую балансировали
            1. тогда нужно балансировать его
              1. и т.д.