Сложность печати времени BST методом преемника преемника

У меня есть метод поиска следующего преемника inorder в дереве двоичного поиска (BST). Метод "inorderSuccessor" принимает любой узел BST в качестве входных данных и выводит следующий преемник inorder. Метод и класс дерева определены следующим образом:

class BSTInorderSuccessor{
  public static Node inorderSuccessor(Node node) {
    if (node.right != null) {
      return minValue(node.right);
    }
    Node parent = node.parent;
    while (parent != null && node == parent.right){
      node = parent;
      parent = parent.parent;
    }
    return parent;
  }
}

class TreeNode{
  int data;
  Node left;
  Node right;
  Node parent;
  public TreeNode(int data){
    this.data = data;
    this.left = null;
    this.right = null;
    this.parent = null;
  }
}

Предположим, что высота BST равна h, и в этой древовидной структуре есть n узлов. Я знаю, что временная сложность метода "inorderSuccessor" - O(h).

Мой вопрос: учитывая самый маленький узел BST. Когда я пишу метод для непрерывного вызова "inorderSuccessor" для печати всех узлов BST, какова общая сложность времени? Я думаю, что это O (N * H). Это верно?

1 ответ

Вы можете ограничить стоимость печати всего, всегда находя преемника inorder в O(nh), но на самом деле это не жесткая граница. Вы можете показать, что время выполнения на самом деле равно Θ(n), независимо от высоты дерева!

Один из способов увидеть это - посмотреть, сколько раз посещается каждое ребро дерева. Если вы проследите выполнение всех этих прохождений по порядку, вы обнаружите, что вы спускаетесь по каждому ребру ровно один раз и поднимаетесь по каждому ребру ровно один раз, а общая выполненная работа пропорциональна количеству посещений каждого ребра. Число ребер в дереве с n-узлами равно Θ(n), отсюда и ограничение времени выполнения.

Обратите внимание, что вы не можете сказать, что каждая отдельная операция займет время O(1). Это не правда. Что вы можете сказать, так это то, что в совокупности каждый из них занимает в среднем O (1) времени.

Другие вопросы по тегам