Làm thế nào bạn có thể in một cây nhị phân ở bên cạnh để kết quả trông như thế này?in cây nhị phân ở cạnh của nó
__/a
__/ \b
\ _/c
\_/ \d
\e
(đẹp ascii-nghệ thuật chào đón)
Dưới đây là một số mã mà không thực hiện khá công việc:
def print_tree(tree):
def emit(node,prefix):
if "sequence" in node:
print "%s%s"%(prefix[:-1],node["name"])
else:
emit(node["left"],"%s_/ "%prefix.replace("/ "," /")[:-1].replace("_"," "))
emit(node["right"],"%s \\ "%prefix.replace("\\ "," \\")[:-1])
emit(tree,"")
Những kết quả đầu ra này:
_/hg19
_/ \rheMac2
_/ \mm9
/\_/bosTau4
/\_/canFam2
_/ \pteVam1
\_/loxAfr3
\dasNov2
Scope creep: nó sẽ là e xcellent nếu bạn có thể vượt qua trong một hàm sẽ trả về chuỗi để in của bất kỳ nút nào; theo cách này, đôi khi tôi cũng có thể in thông tin về các nút không rời. Vì vậy, cho dù một nút có bất cứ điều gì để in được kiểm soát bởi các chức năng thông qua trong như là một tham số.
Dưới đây là một số bài kiểm tra dữ liệu trong JSON:
{
"left": {
"left": {
"left": {
"left": {
"name": "hg19",
"sequence": 0
},
"right": {
"name": "rheMac2",
"sequence": 1
}
},
"right": {
"name": "mm9",
"sequence": 2
}
},
"right": {
"left": {
"name": "bosTau4",
"sequence": 3
},
"right": {
"left": {
"name": "canFam2",
"sequence": 4
},
"right": {
"name": "pteVam1",
"sequence": 5
}
}
}
},
"right": {
"left": {
"name": "loxAfr3",
"sequence": 6
},
"right": {
"name": "dasNov2",
"sequence": 7
}
}
}
Bạn đã thử những gì? Tôi có thể tưởng tượng nó liên quan đến việc tính toán các thuộc tính của cây (chiều sâu, chiều rộng, vân vân), tính toán bố cục và tạo ra nghệ thuật ASCII. –
@SimeonVisser đã thêm một số mã bị hỏng – Will
Nhìn vào điều này khiến tôi nghĩ rằng bạn cũng nên theo dõi chiều sâu của cây. Tôi có một số mã thô sơ dựa trên mã bị hỏng của bạn, nhưng có vẻ khủng khiếp. Đối với mỗi hàng, tôi cố gắng tìm ra bao nhiêu không gian cần có, nhưng việc tái thiết cho hàng đó hiện chỉ chiếm các chi nhánh thấp nhất – Michael