Generar un árbol binario completo con una sola fórmula matricial

Un miembro de la comunidad plantea un reto fascinante: dado un número central (ej: 1007), generar automáticamente todo el árbol binario con ancestros arriba y descendientes abajo, en formato visual de cuadro.

La relación entre nodos sigue la lógica de árboles binarios: para un nodo con valor v (restando 1000 para simplificar), sus hijos izquierdo y derecho son v2+1 y v2+2. Los ancestros se calculan con ENTERO(v/2^n).

Nacho ofrece una primera aproximación funcional con LAMBDA + APILARV/APILARH, hardcodeando la estructura del árbol:

``
=LAMBDA(_v;
LET(
_vn; _v - 1000;
APILARH(
APILARV(
1007 + (_vn 8);
"";
1008 + (_vn 8);
...
);
...
)
)
)
`

John lleva la solución a otro nivel con una fórmula matricial pura usando LET + SECUENCIA + ENFILA y aritmética binaria. La clave está en calcular la "profundidad" de cada celda y usar potencias de 2 para derivar los valores:

`
=LET(
x; 1007;
f; SECUENCIA(7);
c; ENFILA(f);
d; ABS(c-4);
p; 8/2^d;
v; x-999;
SI(d;
SI(RESIDUO(f;2p)=p;
999+v2^d+(c>4)2^(d-1)+ENTERO(f/p/2);
""
);
SI(f<5; 999+ENTERO(v/2^(4-f)); "")
)
)
`

John explica la lógica: para el nodo 1007 (simplificado a 7), hijo izquierdo = 72+1 = 15 (→ 1015), hijo derecho = 72+2 = 16 (→ 1016). Los nietos de 1015 serían 152+1 = 31 y 15*2+2 = 32. Los ancestros se obtienen dividiendo entre potencias de 2.

Leo sugiere una extensión con REDUCE para generar el árbol con bucles, permitiendo definir el rango de números y la estructura de forma variable. La aplicación real: redes de mercadeo con estructura binaria (referidos), donde cada persona tiene dos "patas".

El archivo adjunto contiene la función GENERACUADRO` como LAMBDA registrada que genera todo el árbol a partir de un número central.

Más contenido de Excel en InflueXcel