Convertir l'arbre binaire en arbre binaire de recherche

Harshit Jindal 12 octobre 2023
  1. Algorithme de conversion d’un arbre binaire en BST
  2. Convertir l’arbre binaire en illustration BST
  3. Convertir l’arbre binaire en implémentation BST
  4. Convertir l’arbre binaire en complexité d’algorithme BST
Convertir l'arbre binaire en arbre binaire de recherche

Un arbre binaire est une structure de données non linéaire. Il est appelé arbre binaire parce que chaque nœud a un maximum de deux enfants. Ces enfants sont appelés enfants de gauche et enfants de droite. Il peut également être interprété comme un graphe non dirigé dans lequel le nœud supérieur est appelé racine. Un arbre binaire de recherche (BST) est un arbre binaire avec des propriétés spéciales qui permet de garder les données organisées de manière ordonnée.

Dans ce tutoriel, nous verrons comment convertir un arbre binaire en BST tout en conservant la structure originale de l’arbre binaire.

Algorithme de conversion d’un arbre binaire en BST

  • Créez un tableau appelé arr pour stocker la traversée en ordre des nœuds de l’arbre binaire.
  • Trier arr en utilisant n’importe quel algorithme de tri (MergeSort O(nlogn), QuickSort O(n^2), Insertion Sort O(n^2), etc.)
  • Encore une fois, faites le parcours dans l’ordre de l’arbre et stockez les éléments dans l’arbre binaire à partir du tableau trié arr pour obtenir la BST.

Convertir l’arbre binaire en illustration BST

Illustration de l’arbre binaire à la BST

  • Nous appelons le parcours inorder sur le nœud racine 4. Traversez récursivement vers la gauche pour atteindre le nœud 1, qui est le nœud le plus à gauche, et incluez-le dans notre sortie; comme il s’agit de la racine et qu’il n’y a pas de nœud gauche, nous remontons jusqu’au nœud 2 et l’incluons dans notre parcours. De cette façon, nous parcourons tout l’arborescence et stockons la traversée dans l’ordre dans le tableau arr comme [1, 2, 3, 5, 4, 6] .
  • Triez le tableau arr en utilisant n’importe quel algorithme de tri pour obtenir [1, 2, 3, 4, 5, 6].
  • Nous appelons à nouveau la traversée de l’ordre pour stocker le tableau trié arr dans l’arbre binaire pour obtenir notre BST.

Convertir l’arbre binaire en implémentation BST

#include <bits/stdc++.h>
using namespace std;

class Node {
 public:
  int data;
  Node *left, *right;
  Node(int x) {
    this->data = x;
    this->left = this->right = NULL;
  }
};
vector<int> v;

void inorder(Node* root) {
  if (root != NULL) {
    inorder(root->left);
    cout << root->data << " ";
    inorder(root->right);
  }
}

void storetree(Node* root, int i = 0) {
  if (!root) {
    return;
  }
  storetree(root->left);
  v.push_back(root->data);
  storetree(root->right);
}

void restoretree(Node* root, int& i) {
  if (!root) {
    return;
  }
  restoretree(root->left, i);
  root->data = v[i];
  i++;
  restoretree(root->right, i);
}

void converttoBST(Node* root) {
  if (!root) {
    return;
  }
  storetree(root);
  sort(v.begin(), v.end());
  int i = 0;
  restoretree(root, i);
}

int main() {
  Node* root = new Node(3);
  root->left = new Node(1);
  root->right = new Node(7);
  root->left->left = new Node(4);
  root->left->right = new Node(5);
  root->left->left->right = new Node(2);
  root->right->left = new Node(6);
  root->right->right = new Node(9);
  root->right->right->left = new Node(8);
  cout << "The inorder traversal of the tree is : ";
  inorder(root);
  cout << endl;
  converttoBST(root);
  cout << "The inorder traversal of the tree is : ";
  inorder(root);
  cout << endl;
}

Convertir l’arbre binaire en complexité d’algorithme BST

Complexité du temps

  • Cas moyen

La complexité temporelle de la traversée dans l’ordre dans laquelle nous stockons le tableau dans sorted et stockons le tableau sorted dans l’arborescence binaire est O(n). Mais, la complexité du tri du tableau est O(nlogn) et donc la complexité totale est donnée par O(nlogn) + 2 * O(n). La complexité temporelle est de l’ordre de O(nlogn).

  • Meilleur cas

La complexité temporelle dans le meilleur des cas est de l’ordre de O(n). Lorsque l’arbre binaire donné est déjà un BST, nous effectuons la traversée dans l’ordre pour le réaliser, et aucune opération de tri n’est requise.

  • Pire cas

La complexité temporelle dans le pire des cas est de l’ordre de O(nlogn).

Complexité spatiale

La complexité spatiale de l’algorithme est O(n) en raison de l’espace supplémentaire requis par les appels de récursion.

Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

Article connexe - Data Structure

Article connexe - Binary Tree

Article connexe - Binary Search Tree