Я хотел бы представить "дерево" следующей формы на языке Haskell:
/\
/\/\
/\/\/\
/\/\/\/\
` ` ` ` `
/ и \ - ветви, а ` - листья. Вы можете видеть, что, начиная с любого узла, следуя по пути влево, затем вправо, вы попадаете в тот же узел, что и следуя по пути вправо, затем влево. Вы должны быть в состоянии обозначить листья, применить функцию двух потомков в каждом узле и распространить эту информацию к корню за время O(n^2). Мои наивные попытки дают экспоненциальное время выполнения. Есть подсказки?