Inserto iterativo de árbol binario de búsqueda
- Algoritmo de inserción iterativa BST
- Ilustración de inserto iterativo BST
- Implementación de inserto iterativo BST
- Complejidad del algoritmo de inserción iterativa BST
En el artículo anterior Árbol binario de búsqueda, discutimos el enfoque recursivo para insertar un nodo en BST. En esta publicación, discutiremos el enfoque iterativo para insertar un nodo en BST. Es mejor que el método recursivo, ya que el algoritmo de inserción iterativo no requiere espacio adicional.
Algoritmo de inserción iterativa BST
Sea root el nodo raíz de BST y key el elemento que queremos insertar.
-
Crea el nodo a insertar -
toinsert. -
Inicializa dos punteros,
currapunta arootyprevapunta a nulo. (curratraviesa el árbol yprevmantiene su rastro). -
Mientras
curr!=NULL, haz lo siguiente:- Actualice
prevpara que seacurrpara mantener su estela. - si
curr->data>key, establezcacurrencurr->left, descarte el subárbol derecho. - si
curr->data<key, establezcacurrencurr->right, descarte el subárbol izquierdo.
- Actualice
-
Si
prev==NULL, significa que el árbol está vacío. Cree el nodoroot. -
De lo contrario, si
prev->data>key, insertetoinserta la izquierda deprev,prev->left=toinsert. -
De lo contrario, si
prev->data<key, insertetoinserta la derecha deprev,prev->right=toinsert.
Ilustración de inserto iterativo BST
-
Primero, inicializamos BST creando un nodo
roote insertamos5en él. -
3es menor que5por lo que se inserta a la izquierda de5. -
4es menor que5pero mayor que3, por lo que se inserta a la derecha de3pero a la izquierda de4. -
2es el elemento más pequeño en el árbol actual, por lo que se inserta en la posición más a la izquierda. -
1es el elemento más pequeño en el árbol actual, por lo que se inserta en la posición más a la izquierda. -
6es el elemento más grande en el árbol actual, por lo que se inserta en la posición más a la derecha.
Así es como insertamos elementos dentro de una BST.
Implementación de inserto iterativo BST
#include <iostream>
using namespace std;
class Node {
public:
int key;
Node *left, *right;
};
Node *newNode(int item) {
Node *temp = new Node;
temp->key = item;
temp->left = temp->right = NULL;
return temp;
}
void inorder(Node *root) {
if (root != NULL) {
inorder(root->left);
cout << root->key << " ";
inorder(root->right);
}
}
void insert(Node *&root, int key) {
Node *toinsert = newNode(key);
Node *curr = root;
Node *prev = NULL;
while (curr != NULL) {
prev = curr;
if (key < curr->key)
curr = curr->left;
else
curr = curr->right;
}
if (prev == NULL) {
prev = toinsert;
root = prev;
}
else if (key < prev->key)
prev->left = toinsert;
else
prev->right = toinsert;
}
int main() {
Node *root = NULL;
insert(root, 5);
insert(root, 3);
insert(root, 8);
insert(root, 6);
insert(root, 4);
insert(root, 2);
insert(root, 1);
insert(root, 7);
inorder(root);
}
Complejidad del algoritmo de inserción iterativa BST
Complejidad del tiempo
- Caso promedio
En el caso promedio, la complejidad de tiempo de insertar un nodo en un BST es del orden de la altura del árbol binario de búsqueda. En promedio, la altura de un BST es O(logn). Ocurre cuando la BST formada es una BST equilibrada. Por tanto, la complejidad del tiempo es del orden de [Big Theta]: O(logn).
- Mejor caso
El mejor de los casos ocurre cuando el árbol es una BST equilibrada. La complejidad de tiempo de inserción en el mejor de los casos es del orden de O(logn). Es lo mismo que la complejidad del tiempo promedio de los casos.
- Peor caso
En el peor de los casos, podríamos tener que atravesar desde la raíz hasta el nodo de la hoja más profundo, es decir, toda la altura h del árbol. Si el árbol está desequilibrado, es decir, está sesgado, la altura del árbol puede convertirse en n y, por lo tanto, la complejidad temporal en el peor de los casos de la operación de inserción y de búsqueda es O(n).
Complejidad espacial
La complejidad espacial de la operación de inserción iterativa es O(1) porque no se requiere espacio adicional.
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.
LinkedInArtículo relacionado - Data Structure
- Árbol binario de búsqueda: Eliminar
- Árbol de búsqueda binaria
- Árbol de búsqueda binaria en orden sucesor
- Convertir árbol binario en árbol binario de búsqueda
- Recorrido de árbol binario
Artículo relacionado - Binary Tree
- Árbol binario de búsqueda: Eliminar
- Árbol de búsqueda binaria
- Árbol de búsqueda binaria en orden sucesor
- Convertir árbol binario en árbol binario de búsqueda
- Recorrido de árbol binario
