Если я правильно понимаю, если у узла есть один дочерний элемент, это не левый или правый дочерний элемент, т.е. вы не различаете левый и правый в случае одного дочернего элемента. Тогда я думаю, что это можно сделать в (log 3) n, где log - база 2.
Вы описываете дерево путем обхода предзаказа, для каждого узла вы записываете количество дочерних элементов (0, 1 или 2). Это создает количество оснований 3 длины n (фактически длина n - 1, последний узел всегда будет иметь нулевые дочерние элементы). Таких чисел ровно 3 ^ (n - 1), их можно закодировать в двоичном виде в (log 3) (n - 1) ~ = 1,59 (n - 1).
Можно использовать O (log n) битов, чтобы записать количество бит в начале закодированной строки битов.
Обновление: вот реализация .