【发布时间】:2015-09-04 23:03:14
【问题描述】:
我正在一个具有树结构的网页中搜索一些数据。
网页包含类别,这些类别中的每一个都可以包含另一个类别或者是一个叶子(它包含特定的数据)。
所以最简单的方法大概就是在这个结构中使用递归来搜索了。但我想在找到每片叶子时保存它的踪迹。
下面是例子:
url_of_1st_level_cat -> url_of_2nd_level_cat -> url_of_3rd_level_cat -> leaf
我希望在处理这片叶子时能够获得叶子的整个痕迹。
所以当我得到一些叶子时,我可以做例如find_trace(leaf) 返回:
[url_of_1st_level_cat,url_of_2nd_level_cat,url_of_3rd_level_cat]
这是搜索叶子的递归函数的伪代码:
def find_leafs_of_category(self,url):
subcategories = self.get_subcategories(url)
for subcategory in subcategories:
if is_leaf(subcategory):
# DO STUFF
else: self.find_leafs_of_category(subcategory)
你对这个问题有什么好的和简单的解决方案吗?
编辑:树应该是有序的,所以当出现一些问题时,它可以从它结束的地方继续。
更详细:
(AAC、AAB不是类别的实名,不能通过实名拆分来追溯)
A - AA ...
- AB ...
- AC - ACA ...
- ACB ...
- ACC ...
- ACD - leaf1
- leaf2
- leaf3
...
- 我使用方法
find_leafs_of_category(A) - 现在,我想用这片叶子做点什么。所以它处理
leaf,leaf,leaf...leaf1,leaf2,突然连接被中断。为了能够继续,我必须记住它已经处理了A - AA ...、A - AB...、A - AC - ACA ...、A - AC - ACB ...、A - AC - ACC ...以及来自A - AC - ACD的所有叶子,这些叶子已经处理的是leaf1和leaf2...所以它必须能够得到跟踪,即A - AC - ACD - leaf3并从这一点继续。
【问题讨论】:
-
那么,你可以通过拆分叶子的url来获得子类别吗?即:a/ab/abc/leaf1 ?
-
@le_vine 不,我绝对不能那样做。我必须记住搜索过程中的痕迹。
-
哎呀,可悲的是,这超出了我的 Python 舒适区 :(
-
您可以附加所有已处理的类别并以您找到的叶子结尾并将其存储在某处。
['A', 'C', 'D', 'leaf1']所以中断后你可以从上一个列表继续前进。