Лучшая структура данных - это дерево (как вы упомянули, лес, поскольку их здесь 2). Однако S-выражения могут легко представлять деревья - а S-выражения могут представлять списки списков, которые эквивалентны деревьям.
Вы можете просто принять соглашения для деревьев в виде списка, например, первый элемент является текущим узлом, а следующие элементы являются дочерними. Используя это соглашение, первое дерево будет представлено как:
(a1 (a1 (a11 (a111 a112 a113) a112) a12 a13))
Второй
(a2 (a21 a211) (a22 a221) (a23 (a231 a2311) (a232 a2321)))
И вы также можете принять соглашение о том, что верхний уровень является первым, поэтому вы просто представляете лес, состоящий из двух списков выше, как список из двух деревьев.
Если вы не догадались, бывший программист на Лиспе:)