Árbol de búsqueda binaria en orden sucesor

  1. Sucesor de orden en algoritmo BST
  2. Sucesor de orden en la ilustración BST
  3. Sucesor de orden en la implementación de BST
  4. Complejidad del sucesor de orden en el algoritmo BST

El sucesor en orden de un árbol binario es el nodo que viene a continuación en el recorrido en orden del árbol binario. Entonces, es NULL para el último nodo dentro del árbol. Dado que el recorrido en orden del árbol de búsqueda binaria es un array ordenada. El nodo con la clave más pequeña mayor que el nodo dado se define como su sucesor en orden. En una BST, hay dos posibilidades para el sucesor del orden, el nodo con el menor valor en el subárbol derecho o antepasado del nodo. De lo contrario, el sucesor en orden del nodo no existe.

Sucesor de orden en algoritmo BST

  • Si root == NULL, entonces configure succ como NULL y regrese.
  • Si root->data < current->data, entonces succ como current y current como current->left.
  • Si root->data > current->data, current como current->right.
  • Si root->data == current->data y root->right != NULL, succ = minimum(current->right).
  • devuelve succ.

Sucesor de orden en la ilustración BST

árbol de búsqueda binaria

El sucesor en orden de 3 es 4 porque 3 tiene un nodo derecho y 4 es el nodo más pequeño que es mayor que 3 en el subárbol derecho.

El sucesor en orden de 4 es 5 porque 4 no tiene un nodo correcto, y tenemos que mirar sus ancestros y entre ellos, 5 es el nodo más pequeño que es mayor que 4.

Sucesor de orden en la implementación de BST

#include <iostream>
using namespace std;

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

Node* insert(Node* root, int key)
{
    if (root == NULL) {
        return new Node(key);
    }
    if (key < root->data) {
        root->left = insert(root->left, key);
    }
    else {
        root->right = insert(root->right, key);
    }
    return root;
}

Node* getNextleft(Node* root)
{
    while (root->left) {
        root = root->left;
    }

    return root;
}

void inorderSuccessor(Node* root, Node*& succ, int key)
{

    if (root == NULL) {
        succ = NULL;
        return;
    }

    if (root->data == key)
    {
        if (root->right) {
            succ = getNextleft(root->right);
        }
    }

    else if (key < root->data)
    {
        succ = root;
        inorderSuccessor(root->left, succ, key);
    }
    else {
        inorderSuccessor(root->right, succ, key);
    }
}

int main()
{
    int keys[] = { 1, 5, 8, 2, 6, 3, 7, 4 };
    Node* root = NULL;
    for (int key : keys) {
        root = insert(root, key);
    }
    for (int key : keys)
    {
        Node* prec = NULL;
        inorderSuccessor(root, prec, key);
        if (prec) {
            cout << "Inorder successor of node " << key << " is " << prec->data;
        }
        else {
            cout << "No inorder Successor of node " << key;
        }

        cout << '\n';
    }

    return 0;
}

Complejidad del sucesor de orden en el algoritmo BST

Complejidad del tiempo

  • Caso promedio

En el caso promedio, la complejidad temporal de encontrar un sucesor de orden en una BST es del orden de la altura del árbol de búsqueda binaria. 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 eliminació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 de tiempo en el peor de los casos de las operaciones de inserción y búsqueda es O(n).

Complejidad espacial

La complejidad espacial del algoritmo es O(h) debido al espacio extra requerido por las llamadas recursivas.

Artículo relacionado - Data Structure

  • Convertir árbol binario en árbol binario de búsqueda
  • Inserto iterativo de árbol binario de búsqueda
  • Recorrido de árbol binario
  • Verificación del árbol binario de búsqueda
  • Artículo relacionado - Binary Tree

  • Convertir árbol binario en árbol binario de búsqueda
  • Inserto iterativo de árbol binario de búsqueda
  • Recorrido de árbol binario
  • Verificación del árbol binario de búsqueda
  • Artículo relacionado - Binary Search Tree

  • Convertir árbol binario en árbol binario de búsqueda
  • Inserto iterativo de árbol binario de búsqueda
  • Recorrido de árbol binario
  • Verificación del árbol binario de búsqueda