Zainspirowany ostatnim pytaniem dotyczącym SO ...
Napisz funkcję, aby wydrukować drzewo binarne w następującym formacie:
3
/ \
1 5
\ / \
2 4 6
- Dane wyjściowe powinny składać się z linii węzłów, po której następuje linia znaków
/
i\
znaków wskazujących relacje, po której następuje linia węzłów itp. - Możesz założyć, że wszystkie węzły są reprezentowane jako pojedynczy znak.
- Sąsiadujące węzły na najniższym poziomie powinny być oddzielone co najmniej jedną spacją, węzły dalej w górę powinny być odpowiednio oddzielone.
- Węzły z dwójką dzieci powinny być umieszczone dokładnie pośrodku ich bezpośrednich dzieci.
- Ukośniki relacji powinny znajdować się w połowie drogi między rodzicem a odpowiednim dzieckiem (w dowolnym kierunku).
Wejście:
Dane wejściowe zostaną przekazane jako argument funkcji. Nie podam dokładnej struktury drzewa, jednak musi on być użyteczny jako rzeczywiste drzewo binarne. Żadne „drzewa nie są reprezentowane w moim programie jako ciągi, które przypadkowo wyglądają jak oczekiwane wyniki”.
Możesz wydrukować do strumienia wyjściowego lub zwrócić ciąg zawierający dane wyjściowe, według własnego wyboru.
Punkty za najkrótszy kod, ale zdecydowanie wolałbym w pełni działające długie rozwiązanie niż 90% pracujące krótkie.
Aktualizacja nagrody
Jeśli chodzi o nagrodę, ja (Optymalizator) wprowadzam niewielkie zmiany:
- Dane wejściowe mogą pochodzić z argumentu STDIN, ARGV lub funkcji.
- Dane wyjściowe muszą być na STDOUT (lub
console.log
dla JS) - Możesz założyć, że dane wejściowe mają postać tablicy, na przykład.
[1,2,3]
lub[1 2 3]
Aktualizacja 2 - Drzewo binarne powinno być drzewem wyszukiwania binarnego. Ponieważ początkowo o tym nie wspominałem, pozwolę użytkownikom traktować konwersję normalnej tablicy na binarną tablicę drzewa wyszukiwania jako osobny program, a końcowa liczba bajtów będzie tylko dla programu, który pobierze tablicę jako argument i wydrukuje ją jak drzewo binarne.
30000,1000,499999