说我有一个通过Nokogiri解析的html页面。
我怎样才能找到树的最大深度?我是否遍历每个元素并计算它有多少祖先?有更有效的方法吗?
答案 0 :(得分:1)
//*[count(child::*) = 0]
然后,您可以迭代该表达式返回的所有节点并执行
count(ancestor::*)
...找到达到最大值的节点。
答案 1 :(得分:0)
你必须触摸每个元素,但不要将父母视为第二个动作,将这部分重复在它们之上。
每次进入关卡时,都会增加一个深度变量。
当你升级时,将当前深度与保存的“Deepest”变量进行比较。如果它更大,则替换“最深”变量。
当然,当你上升一个等级时,你也会减少深度变量......
这可以很容易地使用一个递归方法在函数上编写,该方法接收Node并返回最深的。
int maxDepth(Node node)
int max=0;
for each child of node
thisMax=maxDepth(child)
if(max < thisMax)
max=thisMax
return max+1
(这是极少数情况下你可以编写递归函数而不分离终止子句的情况之一)