sealed interface Tree<T> { record Node<T>(T value, Tree<T> left, Tree<T> right) implements Tree<T> { } record Leaf<T>(T value) implements Tree<T> {} }