This is a comprehensive Java implementation of my algorithm for rolling binary trees, which takes a binary tree as input and rolls it in linear time, as described in this paper. Common design patterns and best practices are followed, including the use of generics, static factory methods, the visitor pattern, the strategy pattern, etc. A complete suite of unit and integration tests is included.
Project source code: https://github.com/gtanev/binary-tree-roll-java.