typestar

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

  1. En orden significa subárbol izquierdo, nodo, subárbol derecho.
  2. La profundidad es uno más el hijo más profundo.
  3. Liberar debe visitar a los hijos antes que al padre.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 4 en Árboles, tablas y heaps; paso 12 de 20 en Estructuras de datos y algoritmos.

← Anterior Siguiente →