0Pricing
TypeScript Academy · Lección

Tipado de estructuras de árbol

Modele nodos de árbol anidados con tipos recursivos.

Tipado de estructuras de árbol es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.

Un tipo de nodo de árbol

Los árboles generalizan las listas: cada nodo tiene un valor y un array de nodos hijos del mismo tipo. Se trata de un tipo recursivo con un array children.

type TreeNode<T> = {
  value: T;
  children: TreeNode<T>[];
};
const leaf: TreeNode<number> = { value: 1, children: [] };
console.log(leaf.value);

Construir un árbol pequeño

Un nodo con hijos no es más que un conjunto de objetos anidados. El array vacío es el caso base natural para una hoja.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
const tree: TreeNode<string> = {
  value: "root",
  children: [
    { value: "a", children: [] },
    { value: "b", children: [] }
  ]
};
console.log(tree.children.length);

Anidar a mayor profundidad

Los hijos pueden tener sus propios hijos a cualquier profundidad, porque cada hijo es a su vez un TreeNode completo.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
const tree: TreeNode<number> = {
  value: 1,
  children: [
    { value: 2, children: [{ value: 4, children: [] }] },
    { value: 3, children: [] }
  ]
};
console.log(tree.children[0].children[0].value);

Sumar todos los valores

Una función recursiva visita cada nodo y se aplica recursivamente a sus hijos, acumulando un resultado mediante un recorrido en profundidad.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
function sum(node: TreeNode<number>): number {
  let total = node.value;
  for (const child of node.children) total += sum(child);
  return total;
}
const t: TreeNode<number> = { value: 1, children: [{ value: 2, children: [] }, { value: 3, children: [] }] };
console.log(sum(t));

Contar nodos

La misma estructura de recorrido permite contar nodos: uno por el nodo actual más los recuentos de todos los subárboles.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
function count<T>(node: TreeNode<T>): number {
  return 1 + node.children.reduce((acc, c) => acc + count(c), 0);
}
const t: TreeNode<string> = { value: "r", children: [{ value: "a", children: [] }] };
console.log(count(t));

Encontrar la profundidad máxima

La profundidad es uno más que la profundidad máxima entre los hijos, o uno si se trata de una hoja sin hijos.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
function depth<T>(node: TreeNode<T>): number {
  if (node.children.length === 0) return 1;
  return 1 + Math.max(...node.children.map(depth));
}
const t: TreeNode<number> = { value: 1, children: [{ value: 2, children: [{ value: 3, children: [] }] }] };
console.log(depth(t));

Recopilar todos los valores

Aplane un árbol en un array concatenando el valor actual con los hijos aplanados.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
function flatten<T>(node: TreeNode<T>): T[] {
  return [node.value, ...node.children.flatMap(flatten)];
}
const t: TreeNode<number> = { value: 1, children: [{ value: 2, children: [] }, { value: 3, children: [] }] };
console.log(flatten(t));

Buscar en el árbol

Una búsqueda recursiva devuelve el primer nodo que coincide con un predicado y explora los hijos cuando el nodo actual no coincide.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
function find<T>(node: TreeNode<T>, pred: (v: T) => boolean): TreeNode<T> | null {
  if (pred(node.value)) return node;
  for (const c of node.children) {
    const hit = find(c, pred);
    if (hit) return hit;
  }
  return null;
}
const t: TreeNode<number> = { value: 1, children: [{ value: 5, children: [] }] };
console.log(find(t, v => v === 5)?.value);

Mapear un árbol

Transforme cada valor conservando la estructura mediante el mapeo recursivo del valor y de los hijos.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
function mapTree<T, U>(node: TreeNode<T>, fn: (v: T) => U): TreeNode<U> {
  return { value: fn(node.value), children: node.children.map(c => mapTree(c, fn)) };
}
const t: TreeNode<number> = { value: 1, children: [{ value: 2, children: [] }] };
console.log(mapTree(t, x => x * 100).value);

Los árboles modelan datos reales

Los sistemas de archivos, los árboles DOM, los organigramas y los AST son árboles. Un único tipo recursivo representa todos ellos con seguridad de tipos completa.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
type FileTree = TreeNode<string>;
const fs: FileTree = { value: "/", children: [{ value: "home", children: [] }] };
console.log(fs.value, fs.children[0].value);

Hojas y ramas

Un nodo es una hoja cuando children está vacío y una rama en caso contrario. Esta distinción suele determinar la lógica del recorrido.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
function isLeaf<T>(node: TreeNode<T>): boolean {
  return node.children.length === 0;
}
console.log(isLeaf({ value: 1, children: [] }));

Comprobación rápida: estructuras de árbol

Compruebe su comprensión de la tipificación de estructuras de árbol.

Resumen: tipificación de estructuras de árbol

Modeló árboles con TreeNode<T>, donde cada nodo tiene un valor y un array de nodos hijos, y después escribió funciones recursivas para sumar, contar, buscar y mapear sus elementos.

type TreeNode<T> = { value: T; children: TreeNode<T>[] };
const t: TreeNode<number> = { value: 1, children: [{ value: 2, children: [] }] };
console.log(t.children[0].value);

Preguntas frecuentes

¿La lección «Tipado de estructuras de árbol» es gratis?

Sí — el texto completo de «Tipado de estructuras de árbol» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Tipado de estructuras de árbol»?

Modele nodos de árbol anidados con tipos recursivos. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar TypeScript Academy?

No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Tipado de estructuras de árbol»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?

Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Definiciones de tipos recursivos
  2. Tipado de estructuras de árbol
  3. Tipos de valores JSON
  4. Profundidad y límites de la recursión
← Volver a TypeScript Academy