Lấy cảm hứng từ một câu hỏi gần đây về SO ...
Viết hàm để in cây nhị phân theo định dạng sau:
3
/ \
1 5
\ / \
2 4 6
- Đầu ra phải bao gồm một dòng các nút, theo sau là một dòng
/
và các\
ký tự chỉ ra các mối quan hệ, theo sau là một dòng các nút, v.v. - Bạn có thể giả sử tất cả các nút có thể biểu diễn dưới dạng một ký tự.
- Các nút liền kề ở mức thấp nhất nên được phân tách bằng ít nhất một khoảng trắng, các nút tiếp theo nên được phân tách khi thích hợp.
- Các nút có hai con nên được đặt chính xác ở giữa con trực tiếp của chúng.
- Chém mối quan hệ nên được một nửa giữa cha mẹ và đứa trẻ thích hợp (làm tròn bất cứ cách nào bạn muốn).
Đầu vào:
Đầu vào sẽ được cung cấp làm đối số cho chức năng của bạn. Tôi sẽ không chỉ định cấu trúc chính xác của cây, tuy nhiên nó phải có thể sử dụng như một cây nhị phân thực tế. Không có "cây nào được biểu diễn trong chương trình của tôi dưới dạng các chuỗi trùng khớp với sản lượng dự kiến".
Bạn có thể in ra một luồng đầu ra hoặc trả về một chuỗi chứa đầu ra, sự lựa chọn của bạn.
Điểm cho mã ngắn nhất, nhưng tôi rất thích một giải pháp dài hoàn toàn làm việc hơn là một giải pháp ngắn hoạt động 90%.
Cập nhật cho tiền thưởng:
Đối với tiền thưởng, tôi (Trình tối ưu hóa) đang thực hiện các thay đổi nhỏ:
- Đầu vào có thể từ STDIN, ARGV hoặc đối số hàm.
- Đầu ra cần phải ở trên STDOUT (hoặc
console.log
cho JS) - Bạn có thể giả sử rằng đầu vào ở dạng mảng, ví dụ như ex.
[1,2,3]
hoặc là[1 2 3]
Cập nhật 2 - Cây nhị phân thực sự phải là cây tìm kiếm nhị phân. Vì ban đầu tôi không đề cập đến điều này, tôi sẽ cho phép người dùng coi việc chuyển đổi một mảng bình thường thành một mảng cây tìm kiếm nhị phân như một chương trình riêng biệt và số byte cuối cùng sẽ chỉ dành cho chương trình lấy mảng đó làm đối số và in nó như một cây nhị phân.
30000,1000,499999