Tiếp tục với câu hỏi cũ của tôi: Viết từ điển lồng nhau (rừng) có độ sâu lớn vào tệp văn bản
Bây giờ tôi muốn viết giao rừng theo kiểu BFS: Tôi có một từ điển sâu khổng lồ đại diện cho rừng (nhiều cây không nhị phân) và tôi muốn xử lý rừng và tạo một tệp văn bản chứa một chuỗi các quan hệ (cha, con) từ rừng, tức là Cho từ điển:
{'a': {'b': {'c': {'x': {}}, 'd': {'p': {}}}, 'g': {}, 'f': { }},
't': {'r': {'o': {}}, 'y': {}}}
Tệp văn bản được tạo trông như thế này:
(ROOT,b) (ROOT,g) (ROOT,f) (b,c) (b,d) (c,x) (d,p) \n
(ROOT,r) (ROOT,y) (r,o) \n
Lưu ý rằng tôi đã thay thế tất cả các rễ trong rừng bằng từ "ROOT".
Đây là một hình dung đơn giản của khu rừng:
Từ điển lồng nhau có kích thước lớn và việc lặp lại nó theo cách đệ quy sẽ gây ra lỗi thời gian chạy trong bộ nhớ, vì vậy tốt hơn nên sử dụng giải pháp "kiểu trình tạo" trong liên kết ở đầu câu hỏi này.
d = {'a': {'b': {'c': {'x': {}}, 'd': {'p': {}}}, 'g': {}, 'f' : {}}, 't': {'r': {'o': {}}, 'y': {}}}
với open('file', 'w') là f:
cho r, s trong d.items():
q = []
p=r
while True:
cho k, v trong s.items():
f.write('(%s,%s) ' % ('ROOT' if p == r else p, k))
nếu v:
q.append((k, v))
nếu không q:
break
p, s = q.pop(0)
f.write('\n')
Đầu ra này:
(ROOT,b) (ROOT,g) (ROOT,f) (b,c) (b,d) (c,x) (d,p)
(GỐC,r) (GỐC,y) (r,o)
Tôi là một lập trình viên xuất sắc, rất giỏi!