Recorrer un árbol en C
En orden, profundidad y liberación: tres recursiones con la misma forma.
#include <stdlib.h>
typedef struct Tree {
int key;
struct Tree *left;
struct Tree *right;
} Tree;
void in_order(const Tree *node, int *out, int *n) {
if (node == NULL) {
return;
}
in_order(node->left, out, n);
out[(*n)++] = node->key;
in_order(node->right, out, n);
}
int depth(const Tree *node) {
if (node == NULL) {
return 0;
}
int left = depth(node->left);
int right = depth(node->right);
return 1 + ((left > right) ? left : right);
}
void tree_free(Tree *node) {
if (node == NULL) {
return;
}
tree_free(node->left);
tree_free(node->right);
free(node);
}
Cómo funciona
- En orden significa subárbol izquierdo, nodo, subárbol derecho.
- La profundidad es uno más el hijo más profundo.
- Liberar debe visitar a los hijos antes que al padre.
Palabras clave y builtins usados aquí
NULLconstifintreturnstructtypedefvoid
El intento, en números
- Líneas
- 34
- Caracteres a escribir
- 561
- Tokens
- 191
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 109 segundos.
Paso 2 de 4 en Árboles, tablas y heaps; paso 12 de 20 en Estructuras de datos y algoritmos.