Sucesor de un valor
Lección 16 de 16 del curso Árbol AVL - Serie de Estructuras de Datos #10 de Coddy.
El sucesor in-order de un valor es el valor más pequeño en el árbol que es estrictamente mayor que él, el valor que vendría justo después de él en una lista ordenada. Si el valor es el máximo en el árbol, no tiene sucesor.
Puedes encontrarlo en una sola pasada sin necesidad de ordenar nada: baja desde la raíz y, cada vez que pases a la derecha de un valor que es demasiado pequeño, recuerda el último nodo desde el cual te moviste a la izquierda como tu mejor candidato hasta el momento.
Desafío
FácilEscribe una función successor(tree, value) que devuelva el valor más pequeño en el árbol estrictamente mayor que value, o -1 si no existe ninguno.
Pruébalo tú mismo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "avltree.h"
#include "solution.h"
int main(void) {
AVLTree* tree = AVLTree_create();
char line1[4096];
fgets(line1, sizeof(line1), stdin);
char* tok = strtok(line1, " \n");
while (tok != NULL) {
AVLTree_insert(tree, atoi(tok));
tok = strtok(NULL, " \n");
}
char line2[256];
fgets(line2, sizeof(line2), stdin);
int p0 = atoi(strtok(line2, " \n"));
int result = successor(tree, p0);
printf("%d\n", result);
return 0;
}
Todas las lecciones de Árbol AVL - Serie de Estructuras de Datos #10
3Desafíos de práctica
K-ésimo elemento más pequeñoSuma de rangoAncestro común más bajoRecorrido por nivelesSucesor de un valor