Бинарное дерево поиска

Вставка, поиск и удаление узлов. Анимированные обходы — прямой, симметричный, обратный и в ширину. Наглядно видно структуру BST.

BST Обходы дерева Рекурсия

Дерево

Пустое дерево.

Операции

Нажмите кнопку обхода, чтобы увидеть последовательность узлов.

Идея BST

Вставка в BST
void Push(Node *&root, int data) {
  if (root == 0) {
    root = new Node;
    root->n = data;
    root->left = root->right = 0;
  }
  else if (data < root->n) Push(root->left,  data);
  else if (data > root->n) Push(root->right, data);
}
Симметричный обход (даёт отсортированную последовательность)
void InOrder(Node *p) {
  if (!p) return;
  InOrder(p->left);
  cout << p->n << " ";
  InOrder(p->right);
}

Задание

  1. Вставьте последовательность 50, 30, 70, 20, 40, 60, 80. Какой из обходов даёт отсортированный вывод?
  2. Вставьте 100, 110, 120 в подряд. Что произошло со структурой дерева?
  3. Удалите узел с двумя потомками. Какой элемент встанет на его место?
  4. Реализуйте подсчёт количества листьев в дереве.
  5. Реализуйте проверку, является ли дерево сбалансированным (AVL-условие).