Tôi có một kiểu cho một cây như vậy:Truy tìm cây?
data Tree a = EmptyTree | Tree a [Tree a] deriving (Show, Ord, Eq)
freeTree :: Tree Integer
freeTree = Tree 2 [Tree 5 [], Tree 6 [Tree 8 [], Tree 9 []], Tree 7 []]
main = print freeTree
Những gì tôi đang cố gắng làm là viết một hàm có thể dùng nói như vậy:
trace freeTree
Và những gì một dấu vết trên cây này sẽ quay trở lại là: [2],[2,5],[2,6],[2,7],[2,6,8],[2,6,9]
về cơ bản những gì nó làm là:
Giữ một danh sách các nút đã có trên 'đống' (gốc không ở mỗi độ sâu đã đưa chúng ta đến đây). Mỗi khi bạn đạt đến một nút mới, hãy thêm danh sách đó là danh sách các nút chồng ++ current_node vào danh sách kết quả.
Có ai có thể đưa ra lời khuyên nào về cách thực hiện việc này không?
Cảm ơn
Rất tiếc, không biết ngôn ngữ. Có vẻ như câu hỏi về cấu trúc dữ liệu. Đây có phải là cây nhị phân không? Nhưng có vẻ như một cây đi qua, với tôi giả sử 2 là một gốc có thể. Và bạn có nghĩa là ngăn xếp như trong đẩy mỗi nút cha mẹ bắt đầu từ gốc?vì vậy 2 -> 6 -> 8 sẽ là một nhánh được hiển thị là [2, 6, 8] đúng không? –
Điều này trông giống như một tìm kiếm đầu tiên trên bề rộng cây. – chi
@chi nó thực sự là vậy, nhưng phần khó khăn là để theo dõi lại các tuyến đường. – jmasterx