União de conjuntos recursivos: como isso funciona realmente?

Atualmente estou fazendo o curso Scala no Coursera no meu tempo livre depois do trabalho, em uma tentativa de finalmente tentar uma programação funcional. No momento, estou trabalhando em uma tarefa na qual devemos "calcular" a união de dois conjuntos que contêm algum objeto. Estou intencionalmente omitindo detalhes, pois não é realmente importante para o que estou tentando perguntar aqui. O que é relevante, no entanto, é que os conjuntos são definidos como árvores binárias, com cada nó contendo um elemento e duas subárvores.

Sendo esse o caso; o exemplounion na palestra é a seguinte:

def union(other:BTSet) :BTSet = ((left union right) union other) incl element

Questão 1: Francamente, mesmo depois de ter lido o FAQ relevante e outros tópicos do fórum, ainda não entendi como e por que essa função funciona. Não há absolutamente nenhuma "ação" feita aqui na implementação do sindicato além deincl chame) o elemento no nó principal, ele simplesmente se chama repetidamente. Eu ficaria muito agradecido por alguma explicação ...

Questão 2: O fórum do curso contém muitos posts afirmando que esta solução não é eficiente, e que não é boa o suficiente. Visto que eu não entendo como isso funciona para começar, eu realmente não entendo porque não é bom o suficiente.

Por favor note que eu não, de forma alguma, pedir um spoiler para a solução de atribuição. Estou mais do que disposto a "fazer o trabalho para a série", mas simplesmente não entendo o que devo fazer aqui. Eu não acredito que as instruções e orientações fornecidas no curso sejam adequadas para enrolar a cabeça em torno das peculiaridades da programação funcional, portanto, eu agradeço quaisquer comentários / respostas que o endereçocomo pensar direito ao invés decomo codificar direito.

questionAnswers(6)

yourAnswerToTheQuestion