làm thế nào để tôi đại diện cho cây tìm kiếm nhị phân trong python?đại diện cho cây tìm kiếm nhị phân trong python
Trả lời
class Node(object):
def __init__(self, payload):
self.payload = payload
self.left = self.right = 0
# this concludes the "how to represent" asked in the question. Once you
# represent a BST tree like this, you can of course add a variety of
# methods to modify it, "walk" over it, and so forth, such as:
def insert(self, othernode):
"Insert Node `othernode` under Node `self`."
if self.payload <= othernode.payload:
if self.left: self.left.insert(othernode)
else: self.left = othernode
else:
if self.right: self.right.insert(othernode)
else: self.right = othernode
def inorderwalk(self):
"Yield this Node and all under it in increasing-payload order."
if self.left:
for x in self.left.inorderwalk(): yield x
yield self
if self.right:
for x in self.right.inorderwalk(): yield x
def sillywalk(self):
"Tiny, silly subset of `inorderwalk` functionality as requested."
if self.left:
self.left.sillywalk()
print(self.payload)
if self.right:
self.right.sillywalk()
v.v ... về cơ bản giống như bất kỳ ngôn ngữ nào khác sử dụng tham chiếu hơn là con trỏ (như Java, C#, v.v ...).
Sửa:
Tất nhiên, sự tồn tại của sillywalk
là ngớ ngẩn thực sự, bởi vì chính xác cùng chức năng là một đoạn bên ngoài singe-liner trên đầu trang của walk
phương pháp:
for x in tree.walk(): print(x.payload)
và với walk
, bạn có thể có được bất kỳ chức năng nào khác trên luồng nút theo thứ tự, trong khi, với sillywalk
, bạn có thể có được chỉ về diddly-squat. Nhưng, hey, OP nói yield
là "đáng sợ" (Tôi tự hỏi có bao nhiêu từ khóa 30 khác của Python 2.6 xứng đáng với những từ sợ hãi như vậy trong phán đoán của OP? -) vì vậy tôi hy vọng print
là không!
Đây là tất cả hoàn toàn vượt ra ngoài câu hỏi thực tế, trên đại diện BSTs: rằng câu hỏi hoàn toàn được trả lời trong __init__
- một thuộc tính payload
để giữ trọng tải của nút, left
và right
thuộc tính để giữ một trong hai None
(nghĩa , nút này không có hậu duệ ở bên đó) hoặc Node
(đỉnh của cây con của hậu duệ ở bên thích hợp). Tất nhiên, ràng buộc BST là mọi hậu duệ bên trái của mỗi nút (nếu có) có trọng tải nhỏ hơn hoặc bằng với trọng số của nút đang được đề cập, mọi quyền (một lần nữa, nếu có) có trọng tải lớn hơn - tôi đã thêm insert
chỉ để cho thấy tầm quan trọng của việc duy trì ràng buộc đó, walk
(và bây giờ là sillywalk
) để chỉ ra tầm quan trọng của việc thu thập tất cả các nút theo thứ tự tăng tải trọng. Một lần nữa, ý tưởng chung giống hệt như cách bạn muốn đại diện cho BST bằng bất kỳ ngôn ngữ nào sử dụng tham chiếu thay vì con trỏ, ví dụ như C# và Java.
Bạn nên để không gian này ra một chút, nó khá khó để đọc tất cả với nhau như thế. – detly
@Alex Yield !!!! : | tôi chắc chắn có một giải pháp ít đáng sợ hơn này cho một newbie như tôi. –
@Bunny, Python có rất ít từ khóa thực sự (31, kể từ 2.6) - mà từ những con số nhỏ bé này bạn thấy "đáng sợ"? Dù sao, tôi sẽ thêm một phương pháp giống như ngớ ngẩn và vô nghĩa (làm việc về cơ bản giống như 'đi bộ 'nhưng theo cách bị hạn chế) nếu điều đó làm bạn hạnh phúc (và thêm khoảng trống để làm cho hạnh phúc quá hạnh phúc) - chỉnh sửa A cho phù hợp. –
- 1. Cây tìm kiếm nhị phân tích hợp trong Python?
- 2. Cây tìm kiếm nhị phân đệ quy
- 3. Cây tìm kiếm nhị phân trên cây AVL
- 4. Tìm hiểu về cấu trúc cây tìm kiếm nhị phân
- 5. Xây dựng cây tìm kiếm nhị phân cân bằng
- 6. Tìm kiếm nhị phân Cây C thực hiện
- 7. Cây tìm kiếm nhị phân cân bằng hoàn hảo
- 8. Tìm kiếm ký tự đại diện trên Appengine trong python
- 9. Cách tạo cây nhị phân
- 10. Thuật toán tìm kiếm nhị phân trong python
- 11. Tìm kiếm đệ quy cho một nút trong cây không phải nhị phân
- 12. C# hằng số nhị phân đại diện
- 13. Đại diện cho một cây trong Clojure
- 14. Tìm đường dẫn trong cây tìm kiếm nhị phân tổng hợp thành giá trị đích
- 15. Tìm kiếm nhị phân không phân nhánh
- 16. Tính trung trong tìm kiếm nhị phân
- 17. Tìm kiếm nhị phân chung trong C#
- 18. Sự khác nhau giữa cây tìm kiếm và cây nhị phân hiệu quả là gì?
- 19. kiểm tra xem cây có phải là cây tìm kiếm nhị phân không
- 20. Python: Tìm kiếm/đọc dữ liệu nhị phân
- 21. Tìm kiếm ký tự đại diện trong Solr
- 22. Tìm kiếm ký tự đại diện Solr
- 23. Tìm kiếm theo ký tự đại diện cho LINQ
- 24. Cây nhị phân tìm kiếm cân bằng ― chỉ lưu trữ dữ liệu trong lá
- 25. Tại đó tìm kiếm nhị phân trở nên nhanh hơn tìm kiếm tuyến tính trên CPU hiện đại?
- 26. Chuyển cây nhị phân
- 27. JAVA: cây nhị phân
- 28. Tại sao nhị phân Guids khác với đại diện thường
- 29. Tìm kiếm nhị phân đệ quy Cây x = thay đổi (x)
- 30. Chuyển đổi chuỗi đại diện nhị phân của một byte với giá trị nhị phân thực tế bằng Python
Bạn có thể cụ thể hơn không? Bạn đang cố làm gì vậy? –
Tôi đang cố gắng xây dựng một cây tìm kiếm nhị phân vì lợi ích của việc học. –