Inspirado por uma pergunta recente sobre SO ...
Escreva uma função para imprimir uma árvore binária no seguinte formato:
3
/ \
1 5
\ / \
2 4 6
- A saída deve consistir em uma linha de nós, seguida por uma linha de
/
e\
caracteres indicando relacionamentos, seguida por uma linha de nós, etc. - Você pode assumir que todos os nós são representáveis como um único caractere.
- Os nós adjacentes no nível mais baixo devem ser separados por pelo menos um espaço, os nós mais acima devem ser separados conforme apropriado.
- Nós com dois filhos devem ser colocados precisamente no meio de seus filhos diretos.
- As barras de relacionamento devem estar na metade do caminho entre o pai e o filho apropriado (arredondar da maneira que desejar).
Entrada:
A entrada será fornecida como argumento para sua função. Não especificarei a estrutura exata da árvore, no entanto, ela deve ser utilizável como uma árvore binária real. Nenhuma "árvore é representada no meu programa como seqüências coincidindo com a saída esperada".
Você pode imprimir em um fluxo de saída ou retornar uma sequência que contenha a saída, sua escolha.
Aponta para o código mais curto, mas eu prefiro uma solução longa que funcione totalmente do que uma solução curta que funciona 90%.
Atualização para a recompensa:
Para a recompensa, eu (Otimizador) estou fazendo pequenas alterações:
- A entrada pode ser de STDIN, ARGV ou argumento de função.
- A saída precisa estar no STDOUT (ou
console.log
no JS) - Você pode assumir que a entrada está em uma forma de matriz, por exemplo.
[1,2,3]
ou[1 2 3]
Atualização 2 - A árvore binária deve realmente ser uma árvore de pesquisa binária. Como não mencionei isso inicialmente, permitirei que os usuários tratem a conversão de uma matriz normal em uma matriz de árvore de pesquisa binária como um programa separado e a contagem final de bytes será apenas para o programa receber a matriz como argumento e imprimi-la como uma árvore binária.
30000,1000,499999