Convertir l'arbre binaire en arbre binaire de recherche
- Algorithme de conversion d’un arbre binaire en BST
- Convertir l’arbre binaire en illustration BST
- Convertir l’arbre binaire en implémentation BST
- Convertir l’arbre binaire en complexité d’algorithme BST
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
-
Nous appelons le parcours inorder sur le nœud racine
4
. Traversez récursivement vers la gauche pour atteindre le nœud1
, 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œud2
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 tableauarr
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 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.
LinkedInArticle connexe - Data Structure
- Arbre binaire de recherche
- Insertion itérative de l'arbre binaire de recherche
- Successeur de l'arbre de recherche binaire
- Suppression de l'arbre binaire de recherche
- Traversée de l'arbre binaire
Article connexe - Binary Tree
- Arbre binaire de recherche
- Insertion itérative de l'arbre binaire de recherche
- Successeur de l'arbre de recherche binaire
- Suppression de l'arbre binaire de recherche
- Traversée de l'arbre binaire