export type EmptyImmutableTree = { readonly left: null; readonly right: null; readonly size: 0; readonly value: null; }; export type NonEmptyImmutableTree = { readonly left: ImmutableTree; readonly right: ImmutableTree; readonly size: number; readonly value: T; }; export type ImmutableTree = | EmptyImmutableTree | NonEmptyImmutableTree; export type MutableTree = { left: ImmutableTree; right: ImmutableTree; size: number; value: T; };