Escreva um programa que use uma árvore binária como entrada e produz o nó mais profundo e sua profundidade. Se houver um empate, imprima todos os nós envolvidos, bem como suas profundidades. Cada nó é representado como:
T(x,x)
T(x)
T
onde T
é o identificador de um ou mais caracteres alfanuméricos e cada um x
é outro nó.
Aqui está uma definição simples de uma árvore binária:
- Na cabeça de uma árvore binária está um nó.
- Um nó em uma árvore binária tem no máximo dois filhos.
Por exemplo, a entrada A(B(C,D(E)))
(abaixo) seria exibida 3:E
.
Enquanto a árvore a seguir é um empate de três vias entre 5, 11 e 4, e sua profundidade também é 3 (começando em 0):
A entrada 2(7(2,6(5,11)),5(9(4)))
(abaixo) seria exibida 3:5,11,4
.
Esse é o código golf, portanto o código mais curto medido em bytes vence.
code-golf
binary-tree
Jwosty
fonte
fonte
Respostas:
CJam,
4947fonte
Haskell, 186 bytes
Programa completo, assume árvore
stdin
, produz formato de saída especificado emstdout
:Guia para o código de golfe (adicionado nomes melhores, assinaturas de tipo, comentários e algumas subexpressões extraídas e nomeadas - mas, caso contrário, o mesmo código; uma versão não-golfista não entraria em conflito com a numeração, nem com a profundidade) com formatação de saída.) :
fonte
GolfScript (75 caracteres)
Não é especialmente competitivo, mas é suficientemente distorcido para ter algum interesse:
O código tem três fases. Primeiramente, nós pré-processamos a string de entrada:
Nós transformamos, por exemplo,
A(B(C,D(E)))
para'A'^('B'^('C'^'D'^('E'^)''^)''^)
. Se atribuirmos um bloco adequado^
, podemos fazer um processamento útil usando~
para avaliar a string.Em segundo lugar, encontramos a profundidade máxima:
Finalmente, selecionamos os nós mais profundos e construímos a saída:
fonte
Perl 5 - 85
Sinta-se livre para editar este post para corrigir a contagem de caracteres. Uso o
say
recurso, mas não conheço os sinalizadores para executá-lo corretamente sem declararuse 5.010;
.Demonstração em ideone
A saída é separada por espaço em vez de separada por vírgula.
O código simplesmente usa regex recursivo para remover a raiz das árvores na floresta, até que não seja possível fazer isso. A sequência anterior ao último conterá todos os nós das folhas no nível mais profundo.
Amostras de execuções
fonte
VB.net
Assunção: valores de nó não pode conter
,
,(
,)
fonte
Javascript (E6) 120
Versão iterativa
Ungolfed e testable
Teste no console do Firefox:
Resultado
fonte